[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]