三分钟看Netty(3) select poll VS epoll

前言

上一节主要讲述了BIO和NIO的区别。BIO每一步都是阻塞式的;NIO仅在select的时候阻塞,并且在获取到IO权限后,可以同时操作多个IO。

在NIO的具体实现上,又有不同。在linux上主要分为select ,poll,epoll。

简单的背景介绍

网络IO本质上是对FD(文件描述符)的操作,用户代码需要先从操作系统获取到FD,进而执行IO操作。上述将的几种实现,主要体现在FD遍历上的不同。

select poll 模式

poll是对select的一次改进,但是遍历FD方式是一致的。

在用户调用selector.selectedKeys()的时候,操作系统扫描所有socket,从系统内核复制到用户的内存。随着连接数的增长,遍历、复制的时间线性增长,并且消耗内存随之增大。

epoll 模式

epoll的模式仅关心活跃的部分,减少遍历和复制操作。

简单总结

epoll模式给高连接数,高并发的程序带来了性能的提高。

如何使用epoll

在Netty编程中,将select 切换成 epoll十分方便。

代码上需要修改两个地方: NioEventLoopGroup 替换成 EpollEventLoopGroup NioServerSocketChannel 替换成 EpollServerSocketChannel

这里需要引入的依赖:netty-transport-native-epoll 或者直接使用 netty-all。

参考: https://cloud.tencent.com/developer/article/1005481 http://colobu.com/2014/09/12/java-nio-epoll/

猜你喜欢

转载自my.oschina.net/u/992559/blog/1787817
今日推荐