2019獨角獸企業重金招聘Python工程師標準>>>
前言
epoll select poll區別。上一節主要講述了BIO和NIO的區別。BIO每一步都是阻塞式的;NIO僅在select的時候阻塞,并且在獲取到IO權限后,可以同時操作多個IO。
在NIO的具體實現上,又有不同。在linux上主要分為select ,poll,epoll。
簡單的背景介紹
php epoll、網絡IO本質上是對FD(文件描述符)的操作,用戶代碼需要先從操作系統獲取到FD,進而執行IO操作。上述將的幾種實現,主要體現在FD遍歷上的不同。
select poll 模式
poll是對select的一次改進,但是遍歷FD方式是一致的。
epoll詳解、在用戶調用selector.selectedKeys()的時候,操作系統掃描所有socket,從系統內核復制到用戶的內存。隨著連接數的增長,遍歷、復制的時間線性增長,并且消耗內存隨之增大。
epoll 模式
epoll的模式僅關心活躍的部分,減少遍歷和復制操作。
epoll wait?簡單總結
epoll模式給高連接數,高并發的程序帶來了性能的提高。
如何使用epoll
select編程?在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/