mmap和senfile
时间: 2023-08-25 17:04:28 浏览: 54
mmap和sendfile是两种在文件处理中常用的技术。
mmap是一种将文件映射到进程的地址空间的方法,它通过建立文件磁盘地址和进程虚拟地址空间的对应关系,实现了文件的访问。在使用mmap时,并没有分配和映射到具体的物理内存空间,而是在第一次加载文件时,通过MMU将虚拟地址转换为物理地址,并将文件加载到物理地址中的内核空间的Page Cache中。这样,进程可以直接通过访问内存的方式来读写文件,而不需要进行繁琐的文件IO操作。\[1\]
sendfile是一种在网络编程中常用的方法,它可以将一个文件的内容直接发送到网络连接中,而无需将文件内容先拷贝到用户缓冲区再发送。sendfile利用了操作系统的DMA引擎,将磁盘文件数据直接映射到内核缓冲区,并与用户缓冲区共享同一块映射数据。这样,在建立映射后,就可以直接从内核缓冲区发送数据,减少了一次拷贝操作,提高了性能。总共需要4次切换和3次拷贝。\[3\]
所以,mmap和sendfile都是在文件处理中提高性能的技术,但它们的应用场景和使用方式有所不同。mmap适用于需要频繁读写文件的场景,而sendfile适用于需要将文件内容直接发送到网络连接的场景。
#### 引用[.reference_title]
- *1* [Java 两种zero-copy零拷贝技术mmap和sendfile的介绍](https://blog.csdn.net/djdjdxieuej/article/details/128683165)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down1,239^v3^insert_chatgpt"}} ] [.reference_item]
- *2* *3* [零拷贝技术:mmap和sendfile](https://blog.csdn.net/lonelymanontheway/article/details/105888792)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down1,239^v3^insert_chatgpt"}} ] [.reference_item]
[ .reference_list ]