IO多路復用模型流程:
(1)選擇器注冊。首先,將需要read操作的目標文件描述符(socket連接)提前注冊到Linux的select/epoll選擇器中,在Java中所對應的選擇器類是Selector類。然后,開啟整個IO多路復用模型的輪詢流程。
(2)就緒狀態的輪詢。通過選擇器的查詢方法,查詢所有提前注冊過的目標文件描述符(socket連接)的IO就緒狀態。通過查詢的系統調用,內核會返回一個就緒的socket列表。當任何一個注冊過的socket中的數據準備好或者就緒了就說明內核緩沖區有數據了,內核將該socket加入就緒的列表中,并且返回就緒事件。
(3)用戶線程獲得了就緒狀態的列表后,根據其中的socket連接發起read系統調用,用戶線程阻塞。內核開始復制數據,將數據從內核緩沖區復制到用戶緩沖區
(4)復制完成后,內核返回結果,用戶線程才會解除阻塞的狀態,用戶線程讀取到了數據,繼續執行
>在用戶進程進行IO就緒事件的輪詢時,需要調用選擇器的select查詢方法,發起查詢的用戶進程或者線程是阻塞的。當然,如果使用了查詢方法的非阻塞的重載版本,發起查詢的用戶進程或者線程也不會阻塞,重載版本會立即返回

### IO多路復用模型的特點
IO多路復用模型的IO涉及兩種系統調用,一種是IO操作的系統調用,另一種是select/epoll就緒查詢系統調用。IO多路復用模型建立在操作系統的基礎設施之上,即操作系統的內核必須能夠提供多路分離的系統調用select/epoll。和NIO模型相似,多路復用IO也需要輪詢。負責select/epoll狀態查詢調用的線程,需要不斷地進行select/epoll輪詢,以找出達到IO操作就緒的socket連接
### IO多路復用模型優缺點
IO多路復用模型的優點是一個選擇器查詢線程可以同時處理成千上萬的網絡連接,所以用戶程序不必創建大量的線程,也不必維護這些線程,從而大大減少了系統的開銷;
IO多路復用模型的缺點是,本質上select/epoll系統調用是阻塞式的,屬于同步IO,需要在讀寫事件就緒后由系統調用本身負責讀寫,也就是說這個讀寫過程是阻塞的。要徹底地解除線程的阻塞,就必須使用異步IO模型
- 概述
- 網絡時延
- 進程間通信
- URI
- URL
- URN
- NAT
- 操作系統基礎
- 內核
- 用戶空間
- 網絡協議模型
- 四層網絡協議模型
- 鏈路層
- 以太網協議
- ARP協議
- RARP協議
- MAC地址
- 網絡層
- IP協議
- ICMP協議
- 子網掩碼
- 傳輸層
- TCP協議
- TCP慢啟動
- TCP性能
- UDP協議
- SCTP協議
- 應用層
- DNS
- TCP/IP協議族
- Socket
- Socket通信模型
- socket和TCP/IP協議族
- Socket三次握手四次揮手
- OSI七層模型
- 物理層
- 數據鏈路層
- 網絡層
- 傳輸層
- 應用層
- HTTP
- 基礎
- HTTP/1.0
- HTTP/1.1
- http2.0
- HTTP報文
- WEB瀏覽器工作機制
- HTTP事務時延
- HTTP與HTTPS區別
- 持久連接
- 用戶驗證
- web結構組件
- 代理
- 正向代理
- 反向代理
- 緩存
- 網關
- 隧道-tunnel
- Agent代理
- http協議補充
- Servlet3異步請求
- ajax
- Comet
- WebSocket
- SPDY協議
- HTTP/2
- QUIC
- WebDAV
- http方法
- http連接
- 短連接&長連接
- 管線化
- 網絡會話
- cookie
- session
- token
- jwt
- cookie與session的區別
- Spring Session
- 分布式session實現方案
- 同源策略
- 跨域
- CORS
- HTTP三大安全問題
- JWT vs OAuth
- HTTPS
- SSL&TLS
- OpenSSL
- HTTPS和TLS/SSL的關系
- X509標準和PKI
- IO模型
- IO
- I/O模型
- 傳統阻塞式I/O
- 非阻塞式I/O
- IO復用
- Connection Per Thread模式
- IO多路復用模型流程
- Reactor模式
- 單Reactor單線程
- 單Reactor多線程
- 主從Reactor多線程
- Proactor模型
- Selector模型
- 信號驅動I/O
- 異步I/O
- select/poll/epoll
- select
- poll
- epoll
- select/poll/epoll適用場景
- 零拷貝原理
- 讀取文件發送網絡內存拷貝
- 零拷貝
- Netty零拷貝
- 密碼學
- 密碼學Hash算法分類
- 加密算法
- 對稱加密
- 非對稱加密
- 數字簽名
- RSA數字簽名算法
- DSA數字簽名算法
- 數字證書
- MAC算法
- web安全
- CSRF攻擊
- XSS
- cookie劫持
- SQL注入
- DDos攻擊
- 常見面試題
- 瀏覽器工作機制和原理
- XSS如何預防
- 如何防止cookie被劫持
- 附錄
- HTTP狀態碼
- 常用的網絡端口