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

前言java

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

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

简单的背景介绍网络

网络IO本质上是对FD(文件描述符)的操做,用户代码须要先从操做系统获取到FD,进而执行IO操做。上述将的几种实现,主要体如今FD遍历上的不一样。并发

select poll 模式socket

poll是对select的一次改进,可是遍历FD方式是一致的。高并发

在用户调用selector.selectedKeys()的时候,操做系统扫描全部socket,从系统内核复制到用户的内存。随着链接数的增加,遍历、复制的时间线性增加,而且消耗内存随之增大。oop

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/

相关文章
相关标签/搜索