rocketmq中零拷贝深入
来源:互联网 发布:淘宝黑曜石哪家好 编辑:程序博客网 时间:2024/06/07 01:57
比较好的文章:http://www.linuxjournal.com/article/6345?page=0,2
所谓零拷贝,指的是应用内存与内核内存不存在拷贝。
对应零拷贝技术有mmap及sendfile。
一.mmap优点:
小文件传输快,需要四次用户态与内核态的切换。文件到内核缓存,内核缓存到socket buffer,socket buffer到网卡内存。cpu介入多,用户态与内核态切换多。
分成两个阶段,
阶段一:调用map方法,建立用户进程与内核内存的映射,映射范围是某个文件。这个是阻塞的。
阶段二:调用write方法,将之前建立的映射,写到socket。
阶段二可以设计成nio形式。实现就是将要写的内容封装成消息发给io线程。io线程异步去做。这方面netty框架就是这么做的。
二.sendfile优点:
大文件传输比mmap快,原因是只存在二次用户态与内核态的切换。并且之后少了内核缓存到socket buffer的拷贝。
分成一个阶段:
发送者阻塞调用sendfile方法,sendfile(socket, file, len);
接着会完成file到内核缓存,内核缓存拷贝个消息在内核缓存的地址到socket buffer。然后dma从socket buffer指示的内核缓存拷贝数据到网卡内存。
这里分成一个阶段,优点很明显少了用户态与内核态切换,及内核到socket buffer的拷贝,并且相应的cpu介入少了。但缺点也是因为这个原因,导致不能nio进行消息发送。
阅读全文
0 0
- rocketmq中零拷贝深入
- NIO 零拷贝深入分析
- 零拷贝
- 零拷贝
- 零拷贝
- 零拷贝:
- 深入理解 RocketMQ
- rocketmq深入一
- 深拷贝 浅拷贝 内存零拷贝
- netty源码分析(二十)NIO堆外内存与零拷贝深入讲解
- 零拷贝技术
- NTZC零拷贝技术
- 零拷贝与 sendfile
- linux 零拷贝技术
- 零拷贝技术
- 零拷贝的定义
- “零拷贝”数据传输
- 理解零拷贝
- java中synchronized和lock底层原理
- STM32中的GPIO_Init()函数的分析
- 设计模式
- Ubuntu 配置jdk1.7
- /usr/bin/env: "python\r": 没有那个文件或目录
- rocketmq中零拷贝深入
- java学习笔记3封装和构造函数
- kubernetes的Service Account和secret
- Java类加载机制
- 记事本在读取一个文本时如何判断是该用啥字符集来读取解析文本字符
- 一句话说清楚什么是闭包函数
- Android ViewDragHelper完全解析 自定义ViewGroup神器
- git将本地文件上传到github
- caffe基础(8):draw_net.py绘制网络结构