關於阻塞 非阻塞 同步 異步的概念

阻塞非阻塞:可以簡單理解爲需要做一件事能不能立即得到返回應答,如果不能立即獲得返回,需要等待,那就阻塞了,否則就可以理解爲非阻塞。
同步異步: 你總是做完一件再去做另一件,不管是否需要時間等待,這就是同步;異步呢則反之,你可以同時做幾件事,並非一定需要一件事做完再做另一件事。同步簡單理解成一問一答同步進行,異步可以簡單理解爲不必等一個問題有答了再去問另一個問題,儘管問,有答了再通知你。

舉個例子: 
我去買一本書,立即買到了,這就是非阻塞;
如果恰好書店沒有,我就等一直等到書店有了這本書買到了才走,這就是阻塞;
如果書店恰好沒有,我就告訴書店老闆,書來了告訴我一聲讓我來取或者直接送到我家,然後我就走了,這就是異步。
那同步呢? 前面兩種情況,非阻塞和阻塞都可以稱爲同步。
如果說書店有這書,我還讓老闆通知我以後來取就沒這個必要了。

反映在編程方面就是 用戶進程 調用 系統調用。(用戶進程對應我,內核 對應 書店老闆,書對應數據資源data , 買書就是一個系統調用了)
這阻塞非阻塞與同步異步IO機制,都是伴隨計算機系統發展,用來解決一些出現的問題。阻塞非阻塞、同步異步可以組合,但是沒必要組合,應該說是不同的IO機制,沒必要糾結怎麼區分,如果定要組合心裏才爽,可以 這樣認爲:阻塞非阻塞都是同步,異步就沒什麼阻塞不阻塞了,都異步了還阻塞啥,肯定是非阻塞了。(異步非阻塞聽起來多彆扭)

unix網絡編程中說到:
將IO模型分爲五類:阻塞IO,非阻塞IO,IO複用,信號驅動,異步IO
其中阻塞IO就是那種recv, read,一直等,等到有了拷貝了數據才返回;
非阻塞就是不用等,立即返回,設置描述符爲非阻塞就行了,但是要進程自己一直檢查是否可讀;
IO複用其實也是阻塞的,不過可以用來等很多描述符;
信號驅動採用信號機制等待;
異步IO就不用等待了,當他告知你的時候,已經可以返回了,數據都拷貝好了。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章