Nginx學習筆記一_UNIX中的IO模型

要理解NGINX框架,首先必須瞭解網絡編程中的5種基本IO模型。

(1)阻塞式IO:進程會阻塞於IO系統調用,直到數據準備好,系統調用完成返回。

(2)非阻塞式IO:進程不會阻塞與系統調用。當檢測到數據未準備好時,不是將進程阻塞,而是立即返回一個錯誤。

(3)IO複用:該模型也會阻塞,但它與阻塞式IO的區別是,阻塞的系統調用不同。什麼意思呢?我們知道阻塞式IO都   是阻塞在read/write一類的IO的系統調用,而IO複用是阻塞在select/poll這一類系統調用。這兩類系統調用的區別是: read/write只能監聽單個系統描述符(即只能監聽一個IO的數據是否準備好),而select/poll可同時監聽多個系統描述符。

(4)信號驅動式IO:該驅動方式靠的是SIGIO信號和信號處理函數,當數據準備好,內核會爲進程產生一個SIGIO信號,讓信號處理函數處理,可以將IO系統調用放在信號處理函數裏,也可以放在進程主循環裏。

(5)異步IO(POSIX規範定義):不導致請求進程阻塞的IO。上面四種都是會導致進程阻塞的IO,稱爲同步IO。爲何?阻塞式IO會阻塞於等待數據和IO操作這兩個過程。非阻塞式IO不會阻塞於等待數據過程,但會阻塞於IO操作過程。IO複用是阻塞於等待數據和IO操作兩個過程。信號驅動式IO阻塞於IO操作過程。因此這四種IO模型都會導致進程阻塞,屬於同步IO。而異步IO指的是等待數據和IO操作都不會阻塞進程,系統調用是立即返回的,而且會在IO操作完成時爲該進程產生一個通知的信號。這算是一種理想的異步IO模型


我們可以看出異步IO纔是真正意義上的非阻塞。

參考書籍:

《UNIX網絡編程》卷一 套接字聯網API  人民郵電出版社


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章