美文网首页
netty专题:1.netty的组件

netty专题:1.netty的组件

作者: 北交吴志炜 | 来源:发表于2019-02-10 17:41 被阅读0次

netty主要的组件有三个

selector :是reactor模型的关键,具体到netty就是两组EventLoopGroup,其中一个是bossEventLoop,负责chanel的accept事件,将连接交给另外一组workEventLoopGroup,包含一组EventLoop,默认cpu核数*2,负责channel的read/write事件,为避免线程切换,每一个channel会绑定给一个工作线程。一个工作线程可以处理多个channel上的事件。linux下可以使用epoll。EventLoop内部类似一个单线程线程池,维护了一个task queue。

buffer:是netty读写的数据容器,可以在堆内存分配,也可以使用直接内存。
compositeBytebuf可以聚合bytebuf,实现零拷贝。netty使用Filechanel的transferto方法,也利用了操作系统的零拷贝。

channel:底层即jdk的socketChannel,数据的传输通道,channel初始化时会绑定一由多个chanelHandlerContext形成的pipeline。是一个双向链表,入站事件出站事件会触发相应handler进行处理。

总结:从IO模型来说,netty的nio基于selector模式,实现方式有select,poll,epoll这些,select模式是循环遍历注册的key,处理相应的事件。linux可以使用epoll提高性能。channel是netty的传输通道,对应就是ServerSocketChannel和SocketChanel。bytebuf是netty的数据缓冲,可以使用堆内存或者直接内存。
netty在操作系统级别可以利用Filechanel的transferto实现零拷贝。
在用户级别,可以通过wapper,复合的compositeBytebuf实现缓冲的零拷贝。

相关文章

网友评论

      本文标题:netty专题:1.netty的组件

      本文链接:https://www.haomeiwen.com/subject/nrlxeqtx.html