页面大小为4096字节。假设你想要一个缓冲区两倍,即8192字节。
如果您使用mmap
,您将映射8192个字节而不执行任何其他操作(从磁盘读取实际数据)。
然后,当您访问第一个字节时,将发生页面错误,您将执行一个I / O以从磁盘读取第一页。阅读本页后,您将获得第一个字节作为答案。
然后当您访问第4097个字节时,将发生新的页面错误,您将执行额外的I / O以从磁盘读取第二页以获取此字节。
但是,如果使用read
,则只需执行一个I / O即可读取8192个字节,然后返回所需的两个字节。
这是一个非常小的例子,但我想一想缓冲区大小是几KB还是MB?看起来mmap有一个大小为4096字节的页面会产生很多I / O,如果你只是调用POSIX read
而可以避免这种情况,这让我想知道为什么要使用mmap
第一名?