IO模型的比较分析
到目前為止已經(jīng)將將四個(gè)IO模型都介紹完了。
那么啊阻塞IO、非阻塞IO、同步IO和異步IO的區(qū)別在哪?
阻塞IO和非阻塞IO的區(qū)別
調(diào)用blocking IO會(huì)一直block住對(duì)應(yīng)的進(jìn)程直到操作完成,而non-blocking IO在kernel還準(zhǔn)備數(shù)據(jù)的情況下會(huì)立刻返回。
同步IO和異步IO的區(qū)別
兩者的區(qū)別就在于synchronous IO做”IO operation”的時(shí)候會(huì)將process阻塞。
經(jīng)過(guò)上面的介紹,會(huì)發(fā)現(xiàn)non-blocking IO和asynchronous IO的區(qū)別還是很明顯的。
在non-blocking IO中,雖然進(jìn)程大部分時(shí)間都不會(huì)被block,但是它仍然要求進(jìn)程去主動(dòng)的check,并且當(dāng)數(shù)據(jù)準(zhǔn)備完成以后,也需要進(jìn)程主動(dòng)的再次調(diào)用recvfrom來(lái)將數(shù)據(jù)拷貝到用戶內(nèi)存。
而asynchronous IO則完全不同,它就像是用戶進(jìn)程將整個(gè)IO操作交給了他人(kernel)完成,然后他人做完后發(fā)信號(hào)通知,在此期間,用戶進(jìn)程不需要去檢查IO操作的狀態(tài),也不需要主動(dòng)的去拷貝數(shù)據(jù)。
總結(jié)
- 上一篇: 7.3.4 异步IO(Asynchron
- 下一篇: 并发编程——练习题