增量构建中的评估器、函数缓存及标准环境构建解析
1. 评估器与源位置信息
在增量构建过程中,评估器在缓存解析树时,需要包含足够的信息,以便能报告任何可能产生错误的构造的原始源位置(文件名、行号、位置)。虽然这会增加函数缓存中的通信、内存和磁盘存储成本,但在调试使用闭包的系统模型时,这种额外信息带来的好处就体现出来了。没有源位置信息,很难找出缓存闭包中的错误。
2. 函数缓存服务器的要求与实现
函数缓存服务器在实现评估器用于执行缓存查找的接口时,面临着一些问题,这些问题直接源于服务器的操作要求,具体如下:
- 持久性 :服务器正确关闭和重启时,不能丢失任何缓存条目。通过将旧的缓存条目存储在磁盘文件中,并对新的缓存条目结合使用日志记录和检查点机制来实现持久性。为提高效率,日志条目保存在内存中,函数缓存接口包含一个将所有待处理日志条目同步刷新到磁盘的方法。
- 容错性 :服务器崩溃或出现其他故障时,函数缓存必须能够以一致的状态恢复。各种日志文件和缓存条目文件的刷新顺序要能让恢复算法在任何时候都能容忍故障。虽然崩溃时可能会丢失一些最近创建的缓存条目,但只需重复相对少量的工作就能重新创建它们。同时,服务器还必须容忍客户端的错误和故障。对于客户端错误,函数缓存接口会对其参数进行运行时检查,并提供错误返回码;对于客户端故障,函数缓存会确保最终回收与中断或未完成评估相关的所有资源。
- 快速查找 :由于磁盘读取在查找所需时间中占主导地位,缓存条目在磁盘上的排列方式使得大多数查找最多只需两次磁盘读取。而且,很多查找能命中内存中的缓存条目,无需进行磁盘读
超级会员免费看
订阅专栏 解锁全文
401

被折叠的 条评论
为什么被折叠?



