用于系统应用的表达性切面语言
1. 从获取到预取
在本地磁盘或通过网络检索文件等操作,如果底层软件能提前预测用户请求并预先获取文档,那么这些操作的速度可以得到提升。不同的预取方案在预测未来用户请求的方式上有所不同。然而,这些“预言器”使得预取功能难以通过定义良好的接口封装在一个单独的模块中与应用的其他部分进行通信,因为预测是基于其他模块的私有信息。此外,不存在一个通用的完美“预言器”。
预取虽然有可能提高性能,但也会增加资源消耗,例如网络预取会消耗本地存储和带宽。当资源需求过高时,预取计算会与常规用户请求争夺资源,从而减慢处理速度而非加快。以Squid为例,它主要管理文件描述符,这是一种数量有限的资源。文件描述符被底层操作系统和应用程序用于描述网络连接或磁盘上的文件。Squid的文件描述符管理基于一个全局变量,该变量跟踪当前正在使用的文件描述符数量。通过将其值与操作系统允许的最大文件描述符数量进行比较,就可以评估是否应该禁用或启用预取。
使用当前的面向切面(AO)技术,根据打开的文件描述符数量启用或禁用预取功能,需要在通知中显式管理相应的状态并触发相应的操作。这是一种不良实践,因为它会影响代码的可读性和可维护性。因此,切面语言中需要一种机制来限制在资源使用过高时通知的执行。
2. C语言系统编程的表达性切面语言
面向切面编程(AOP)是解决上述横切关注点的理想选择,但现有的AO系统都没有对其中的一些关键元素提供明确支持,特别是对函数本地别名的引用以及协议的连接点序列。
我们引入了一种用于C语言系统编程的新切面语言,它可以简洁地表达这些横切关注点。为了说明这一点,我们先通过使用该语言对示例进行简洁的“切面化”处理,然后
超级会员免费看
订阅专栏 解锁全文
7619

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



