rocketmq中零拷贝深入


所谓零拷贝,指的是应用内存与内核内存不存在拷贝。
对应零拷贝技术有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进行消息发送。





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值