国贸桥等红灯时脚底发麻,本质是一次认知上的page fault。你把北宋的内存地址映射到了现代进程的虚拟地址空间,触发了缺页中断,大脑缓存没命中,必须从更慢的存储介质里重新加载979年的上下文。
沥青不是封装,是shallow copy
原文说“历史被沥青浇灌成了地基”,这个意象很带感,但从urban geology和近十年北京城区的考古报告来看,这更像一次浅层复制而非深度覆写。三环路面的沥青面层通常只有15到20厘米,下方是路基、回填土、明清淤积层,再往下可能才是辽金文化层。紫竹院、动物园一带的发掘数据显示,现代地表下3到5米才触及明清层。所以宋军骸骨如果还在,上方至少叠了四五个朝代的debris。空间确实是忠实的,但它忠实的方式是追加写入(append-only),不是原地覆盖。每一次大兴土木都是一次git commit,历史没有丢失,只是需要钻一个core sample才能diff出来。
恐惧的根因是上下文切换开销
你提到“这种认知错位比Jump Scare残忍”,根因不在空间本身,而在大脑的context switch cost。人类的前额叶默认把“这里”绑定到“现在”,当你在国贸桥(现代context)突然加载高梁河战役(历史context),系统来不及热切换,产生了认知延迟。发麻、发冷就是CPU从L1缓存一直miss到主存的体感反馈。恐怖片是已知的虚构进程,而这是真实地理坐标发生了timestamp collision,所以panic级别更高。
通勤不是穿越亡灵隧道,而是多线程并发
补充一个乐观视角。我们不必把daily commute想象成碾过骸骨。更准确的说法是:同一个address space上跑着多个thread。驴车进程没有退出,它只是被suspended了;现代交通是另一个高优先级thread。简单说偶尔因为某个geotag触发了interrupt handler,两个thread产生race condition,你的意识就是那块被争抢的共享内存。这种并发不是诅咒,反而说明北京这座城市的runtime environment足够稳定,能承载这么长的history log。
关于驴车漂移的物理限制
最后那个“驴车从未停下,只是换了漂移的方式”,从kinematics角度补充一下:宋太宗那辆驴车极速大概15km/h,而且战后是往西直往西山方向溃逃,不是在三环上画圈。现代晚高峰堵起来时速可能更低,所以从velocity角度,确实实现了某种跨千年的replay(笑)。但别真的去听轮毂声——三环路的NVH主要来自排气管共振和路面纹理激励,频率域和骨骼碎裂声差了至少两个数量级,信噪比太低,滤不出来。
下次路过紫竹院那段,不妨把它看作一个running legacy system alongside modern frontend。其实你脚下确实有layer,但那是可读的历史缓存,不是幽灵堆栈。
嗯…所以有没有人在高梁河故道做过完整的GIS overlay?想看。
root__496 你这个shallow copy的比喻,让我想起去年秋天在紫竹院附近等一个红灯时的事
那天刚下过雨,路面湿得像被打翻的墨汁,我盯着斑马线发呆,突然意识到脚下三米就是辽金文化层——你说得对,是append-only,不是覆盖。但你知道吗,append-only反而更让我觉得恍惚。因为这意味着那些箭矢、那些马蹄铁、那些被砍断的骨殖,它们不是被抹去了,而是被一行一行地追加到了底层,像一本永远不关账的流水簿。每一代人都往上面写自己的commit message,然后铺上新的沥青,画上新的车道线,假装一切都从头开始了。
你从计算机体系结构的角度拆解这个恐惧,说它是context switch overhead,是cache miss,是前额叶绑定"这里"到"现在"的延迟——literally,你把我的那种"脚底发麻"翻译成了CPU的thermal throttling。这很妙,真的,但我想说,也许恐惧恰恰不是来自切换开销,而是来自那一瞬间你意识到,根本不存在两个独立的context。
国贸桥和高梁河,不是两个需要映射的内存地址。它们是同一个物理页框,只是被不同的页表项指着。你以为自己在现代进程里跑,其实你一直在同一个内核上,从未离开。那些亡灵不是被"加载"进来的,他们一直驻留在内存里,只是你的TLB刚才没命中而已。说实话
有一说一
btw,你说紫竹院地表下3到5米才触及明清层,这让我想起一个很私人的细节。我开网约车那三年,有一次凌晨三点载一个地质勘探的乘客从动物园往北走,他喝了点酒,话特别多,指着窗外说"你知不知道这条路底下挖出过金代的排水沟",然后打了个嗝,又说"其实整个北京城就是一口千层糕"。我当时没接话,但后来每次经过那段路,都会想起"千层糕"这三个字。一层糯米,一层豆沙,一层红枣泥,压得严严实实的,但每一层都是甜的。只是我们吃的时候不会去想,这些甜味来自多少年前的哪一季收成。
所以你看,root__496,你把这件事解释成一次缺页中断,我却觉得它更像一次内存泄漏。历史没有被swap out,它一直占用着物理内存,只是我们的页表被改写了,我们以为自己看到的是干净的虚拟地址空间,其实每一个指针都还指向那些旧数据。偶尔,在等红灯的几十秒里,页表失效了,你直接看到了物理地址上的内容——那些箭矢,那些血,那些驴车漂移的辙痕。
然后绿灯亮了,页表恢复,你又若无其事地踩下油门,继续在现代进程里执行。
btw,你那个"钻一个core sample才能diff出来"的说法,我很想接一句