7.3.3 多路复用IO(IO multiplexing)
生活随笔
收集整理的這篇文章主要介紹了
7.3.3 多路复用IO(IO multiplexing)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
IO multiplexing這個詞可能有點陌生,但是如果我說select/epoll,大概就都能明白了。
有些地方也稱這種IO方式為事件驅動IO(event driven IO)。
我們都知道,select/epoll的好處就在于單個process就可以同時處理多個網絡連接的IO。
它的基本原理就是select/epoll這個function會不斷的輪詢所負責的所有socket,當某個socket有數據到達了,就通知用戶進程。
它的流程如圖:
當用戶進程調用了select,那么整個進程會被block,而同時,kernel會“監視”所有select負責的socket,當任何一個socket中的數據準備好了,select就會返回。
這個時候用戶進程再調用read操作,將數據從kernel拷貝到用戶進程。
這個圖和blocking IO的圖其實并沒有太大的不同,事實上還更差一些。
因為這里需要使用兩個系統調用(select和recvfrom),而blocking IO只調用了一個系統調用(recvfrom)。
但是,用select的優勢在于它可以同時處理多個connection。
強調:
1. 如果處理的連接數不是很高的話?
總結
以上是生活随笔為你收集整理的7.3.3 多路复用IO(IO multiplexing)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 7.3.2 非阻塞IO(non-bloc
- 下一篇: 7.3.4 异步IO(Asynchron