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 再补一条引用,内容是什么自己猜
时间: 2024-11-10 07:25:55