前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >1、基础

1、基础

原创
作者头像
Get
发布2024-03-10 19:40:43
1060
发布2024-03-10 19:40:43
举报
文章被收录于专栏:零拷贝技术
代码语言:java
复制
DMA(Direct Memory Access,直接内存存取,即不使用 CPU 拷贝数据到内存,而是 DMA 引擎传输数据到内存,用于解放 CPU) 
零拷贝技术实现的方式通常有 2 种:
1、mmap + write
2、sendfile
mmap 和 sendFile 的区别:
1、mmap 适合小数据量读写,sendFile 适合大文件传输。
2、mmap 需要 4 次上下文切换,3 次数据拷贝;sendFile 需要 2 次上下文切换,最少 2 次数据拷贝。
3、sendFile 可以利用 DMA 方式,减少 CPU 拷贝,mmap 则不能(必须从内核拷贝到 Socket 缓冲区)。
特性
1、mmap 用于文件共享,很少用于socket操作.sendfile用于发送文件.
2、mmap 是共享一个文件,共享内存是共享一段内存。mmap还可以写回到file.
3、mmap 缺点,每次读入都是1页即4k,所以少于4k会造成大量内存碎片. 但是通过read,write也是这样哈,所以没有更优化的情况?
1、mmap 适用场景,是取代read,write 文件.
2、mmap的本质,就是进程可以访问内核态的页缓存,减少了一次内核态到用户态的拷贝.
3、sendfile的本质,是网络DMA直接读取内核页缓存,减少了一次内核页缓存到socket 缓冲区的拷贝

clipboard.png
clipboard.png

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档