谈一下个人理解: 数据一定是先会从磁盘copy到内存的,这点毋庸置疑。 首先,因为磁盘的速度远低于IO的速度,数据不可能直接从磁盘走到IO,那样IO会一直等待非常缓慢的磁盘。而且内存中有页,每次从磁盘中copy很多的数据到页中,只有缺页的时候才会从缓慢的磁盘中去取数据。 再有,磁盘数据到内存走的是DMA芯片,这个芯片是独立于CPU之外的专门负责将外部数据加载到内存的芯片,所以磁盘数据到内存的过程并不占用CPU,CPU只用给DMA芯片一个指令就可以去干其他事情了。但是如果数据要直接从磁盘到IO,不走内存,那就无法经过DMA(因为DMA是面向内存的),这时候只能由CPU去介入copy数据,将磁盘数据扔进IO,而CPU搬数据远没有DMA高效,再有磁盘又比乌龟还慢,效率可想而知有多么低。 所以数据一定会先由DMA搬入内存,再由CPU介入从内存copy到IO。 其实真正可以优化的地方是内存到IO的过程,内存也分为内核区和用户区,不同的策略会有非常大的效率影响,可以看一下linux的mmap和sendFile的设计思想,就是针对内存到IO之间的优化。
点赞 评论

相关推荐

把球:这个听过,你加了就会发现是字节的hr
点赞 评论 收藏
分享
今天 11:23
重庆邮电大学 C++
点赞 评论 收藏
分享
牛客网
牛客企业服务