首页 > 代码库 > 从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  再补一条引用,内容是什么自己猜