编程中的间接层与Python字典实现解析
1. 系统调用与间接层
在编程领域,系统调用的激增虽被认为不够优雅且违背Unix精神,但应用程序开发者却依赖它们来挖掘Web或数据库服务器的极致性能。这些系统调用存在一些共同代码,以FreeBSD实现为例,为避免代码重复,通过额外函数引入了间接层。其中, kern_preadv 处理位置系统调用变体的公共部分, kern_readv 处理其余两个系统调用,而所有四个调用的通用功能由 dofileread 函数处理。
从用户级程序调用读取函数到磁盘头移动以从盘片获取数据,这是一个漫长而曲折的过程。在此过程中,我们尚未考虑内核层之上(如虚拟机、缓冲、数据表示)以及文件系统处理请求时(再次涉及缓冲、设备驱动程序、数据表示)的情况。有趣的是,未涉及的两端存在一种对称关系:都涉及硬件接口(顶部的虚拟机,如JVM,以及底部的真实接口)、缓冲(顶部用于减少系统调用,底部用于优化硬件性能)和数据表示(顶部用于与用户区域交互,底部用于匹配物理层要求)。可以说,间接层无处不在。在我们所研究的代表性代码块中,九级函数调用、两次通过函数指针的间接调用以及一种特定领域语言,充分展示了间接层的强大力量。
1.1 间接层的优缺点
间接层和分层会增加空间和时间开销,并可能影响代码的可理解性。不过,时间和空间开销通常并不重要,在大多数情况下,额外的指针查找或子程序调用所引入的延迟在整体方案中微不足道。如今,现代编程语言的趋势是通过间接层进行某些操作,以提供更高的灵活性。例如,在Java和C#中,几乎所有对对象的访问都通过一次指针间接调用,以实现自动垃圾回收;在
超级会员免费看
订阅专栏 解锁全文
1862

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



