首页 > 代码库 > 从rocketMQ到零拷贝
从rocketMQ到零拷贝
rocketMQ是阿里的开源MQ,号称很强大很强大
rocketMQ的网络实现是依赖netty
http://my.oschina.net/plucury/blog/192577 这篇文章中描述了netty的零拷贝实现:
根据文中的描述,“Linux中的sendfile()以及Java NIO中的FileChannel.transferTo()方法都实现了零拷贝的功能”,似乎“FileChannel.transferTo()和sendfile()是同一层的实现”,netty通过在FileRegion中封装NIO的FileChannel.transferTo()。
同时,Netty中还有另一种形式的零拷贝,即Netty允许我们将多段数据合并为一整段虚拟数据供用户使用,而过程中不需要对数据进行拷贝操作。Netty通过在用户空间的操作,使用CompositeChannelBuffer将多个ChannelBuffer组成一个虚拟的ChannelBuffer来进行操作,这个过程中只操作ChannelBuffer们的引用。
---------------------------我是分割线
但是,如果和C的能力范围比较,java的局限性还是暴露了。
c能够通过重写部分网络软件栈,将DMA或网卡buffer的数据,直接发送出去,甚至不用走完整个网络栈(java只能干瞪眼了~)
http://blog.csdn.net/jiangbo_hit/article/details/6146502 再补一条引用,内容是什么自己猜
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。