7.3.3 多路复用IO(IO multiplexing)
IO multiplexing這個(gè)詞可能有點(diǎn)陌生,但是如果我說select/epoll,大概就都能明白了。
有些地方也稱這種IO方式為事件驅(qū)動(dòng)IO(event driven IO)。
我們都知道,select/epoll的好處就在于單個(gè)process就可以同時(shí)處理多個(gè)網(wǎng)絡(luò)連接的IO。
它的基本原理就是select/epoll這個(gè)function會(huì)不斷的輪詢所負(fù)責(zé)的所有socket,當(dāng)某個(gè)socket有數(shù)據(jù)到達(dá)了,就通知用戶進(jìn)程。
它的流程如圖:
當(dāng)用戶進(jìn)程調(diào)用了select,那么整個(gè)進(jìn)程會(huì)被block,而同時(shí),kernel會(huì)“監(jiān)視”所有select負(fù)責(zé)的socket,當(dāng)任何一個(gè)socket中的數(shù)據(jù)準(zhǔn)備好了,select就會(huì)返回。
這個(gè)時(shí)候用戶進(jìn)程再調(diào)用read操作,將數(shù)據(jù)從kernel拷貝到用戶進(jìn)程。
這個(gè)圖和blocking IO的圖其實(shí)并沒有太大的不同,事實(shí)上還更差一些。
因?yàn)檫@里需要使用兩個(gè)系統(tǒng)調(diào)用(select和recvfrom),而blocking IO只調(diào)用了一個(gè)系統(tǒng)調(diào)用(recvfrom)。
但是,用select的優(yōu)勢(shì)在于它可以同時(shí)處理多個(gè)connection。
強(qiáng)調(diào):
1. 如果處理的連接數(shù)不是很高的話?
總結(jié)
以上是生活随笔為你收集整理的7.3.3 多路复用IO(IO multiplexing)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 7.3.2 非阻塞IO(non-bloc
- 下一篇: 7.3.4 异步IO(Asynchron