缓存(第4/12页)

除了魔点之外,还有其他节约计算资源的系统措施。“缓存”就是其中之一。

在现实世界,一个人采取某种行动的时候,立刻就会产生某种反馈。比如用锤子敲玻璃,玻璃当场就会碎裂,从窗户上掉下来。但是,在“世界”中,情况却没有这么简单。某个人决定用锤子敲玻璃的刹那,计算机捕捉到大脑运动区域的兴奋,将之反映到虚拟现实中——移动手臂、抓起锤子、敲上玻璃。如果仅仅如此,并不会费什么大力气,但实际上却有很麻烦的问题。手臂、锤子、玻璃,全都是“世界”中的东西——它们和其他居民也在相互作用。比如说,附近有其他居民的时候,就需要考虑在他们的眼中如何反映这幅景象,这必须进行计算;还有模拟玻璃破碎的声音,也需要考虑不远处的居民会听到什么,这也必须进行计算。

这些细节必须加以考虑。“世界”是连续的,必须符合逻辑。每个人的个人体验如果相互之间有矛盾,“世界”就会逐渐分化,最终无法成为一个统一的世界。计算资源也会枯竭,居民们被扔进虚无。

但是,如果将一切都在计算之后再反映到虚拟现实,那响应速度就会很慢,会有一种慢镜头的感觉。想到要去敲玻璃,但是几秒钟之后手才开始行动,敲击的刹那一切动作又都停止,再隔几秒钟玻璃才会碎裂,然后才听到声音。为了这个计算,停止的不仅仅是当事人,毫无关系的所有居民都会同时发生这样的现象。当然,如果有足够的计算资源,就不会有这样的问题。但是如果有这样的空间和载重量,还不如设立缩小版的现实居住区更合理。

对应这个问题的办法就是缓存系统。每个居民都有一个缓存。从居民的角度看,缓存相当于“世界”的拷贝;从“世界”的角度看——也就是在其他居民看来——缓存是当事人的拷贝。

某人想要用锤子敲玻璃的时候,差不多同时,在缓存中当事人抓住锤子敲碎玻璃,同时发出声音。周围的居民受到惊吓,都来看他。但是,这只是当事人自己的体验,在“世界”中什么都还没有发生。在周围人看来,当事人还没有碰到锤子。因为缓存只需要计算自身经历,所以需要的计算资源很少,可以做出迅速反应。

接下来,缓存将自身内部发生的事情传递给“世界”。“世界”花费数秒时间进行计算,产生玻璃破碎的状态。这时候每个人的缓存接收到这一变化,各自重现玻璃碎裂的状况。到这时候为止,周围的居民们才真正看到了玻璃碎裂。

在这个时间点上,当事人和周围居民的体验之间存在几秒乃至十几秒的时间差,不过缓存会在后台进行时间调整,几分钟后便可以消除这个时间差。而且,缓存与缓存之间、缓存与现实之间发生的小摩擦也会被抹平。比如说,A敲碎玻璃的时候,在A的缓存中,附近的B听到声音,吃惊地回头看A。但是,如果实际上B在思考,没有注意到声音,在A的缓存中就会被处理为B回头看了看,然后失去兴趣,重新把头转向了原来的方向。这样的处理会在A、B双方都不注意的情况下自然进行。

“世界”的稳定就是依靠这类看不见的系统活动得以保持的。

“‘世界’的机能瘫痪,具体是指什么呢?”我糊涂了。

“就是字面的意思啊。眼下计算资源正在枯竭,而且枯竭速度非常可怕。照这样下去,几天之内,‘世界’就会停止运作。”

“等等,你的说法让我很混乱。唔……我能问你几个问题吗?”我挠着头问。