天天看點

IO - 同步,異步,阻塞,非阻塞,AIO

[b] IO - 同步,異步,阻塞,非阻塞[/b]

[b]阻塞與非阻塞(程序有沒有挂起)[/b]

阻塞和非阻塞關注的是程式在等待調用結果(消息,傳回值)時的狀态.(就是程序有沒有被挂起)

阻塞調用是指調用結果傳回之前,目前線程會被挂起。調用線程隻有在得到結果之後才會傳回。

非阻塞調用指在不能立刻得到結果之前,該調用不會阻塞目前線程。

[b]同步與異步(調用有沒有等待傳回結果)[/b]

同步和異步關注的是消息通信機制(調用得到的是不是結果(想要的内容),而不是設定狀态和操作狀态的傳回)

所謂同步,就是在發出一個*調用*時,在沒有得到結果之前,該*調用*就不傳回。但是一旦調用傳回,就得到傳回值了。

換句話說,就是由*調用者*主動等待這個*調用*的結果。

而異步則是相反,*調用*在發出之後,這個調用就直接傳回了,是以沒有傳回結果。換句話說,當一個異步過程調用發出後,

調用者不會立刻得到結果。而是在*調用*發出後,*被調用者*通過狀态、通知來通知調用者,或通過回調函數處理這個調用。

[b]阻塞I/O模型(同步阻塞)[/b]

[img]http://dl2.iteye.com/upload/attachment/0119/8581/331c4a60-9125-3a17-aabe-eb4300e7815e.jpg[/img]

blocking IO的特點就是在IO執行的兩個階段都被block了

[b]非阻塞IO模型(同步非阻塞)[/b]

[img]http://dl2.iteye.com/upload/attachment/0119/8583/e575253c-27c5-30ae-a309-dee5248f4d19.jpg[/img]

IO執行的第二個階段被block了

[b]IO複用模型(同步阻塞(但可以同時處理多個IO))[/b]

[img]http://dl2.iteye.com/upload/attachment/0119/8585/f1dd6c09-ac1e-304c-a39a-1368dd8d2f22.jpg[/img]

兩個階段都被block了

[b]信号驅動IO(異步)[/b]

[img]http://dl2.iteye.com/upload/attachment/0119/8587/41439b70-f255-30db-9ae2-5b4720115ce4.jpg[/img]

第二個階段被block了

[b]異步IO模型(異步非阻塞)[/b]

[img]http://dl2.iteye.com/upload/attachment/0119/8589/9fc57f68-c6ad-30a7-a6b8-5a89cab820c4.jpg[/img]

二個階段沒有被block,但占用記憶體空間較多(因為要準備好資料空間用于核心将資料複制到使用者空間)

[b]5個I/O模型的比較[/b]

[img]http://dl2.iteye.com/upload/attachment/0119/8591/f60dbc09-bfee-309a-a936-1a4be376d22e.jpg[/img]

[b]AIO(異步非阻塞IO):[/b]

就是在進行IO調用時要準備好資料存放的空間,調用時告訴核心這個空間的位址,當有資料到達時,核心在這個

空間中得到資料或寫資料到這個空間,核心讀/寫好後就發送通知或回調使程序知道這個事。

參考原檔案:[url]http://www.cnblogs.com/renxs/p/3683189.html[/url]

繼續閱讀