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

2021-06-22 13:35:40 字數 925 閱讀 6503

阻塞非阻塞:可以簡單理解為需要做一件事能不能立即得到返回應答,如果不能立即獲得返回,需要等待,那就阻塞了,否則就可以理解為非阻塞。

同步非同步: 你總是做完一件再去做另一件,不管是否需要時間等待,這就是同步;非同步呢則反之,你可以同時做幾件事,並非一定需要一件事做完再做另一件事。同步簡單理解成一問一答同步進行,非同步可以簡單理解為不必等乙個問題有答了再去問另乙個問題,儘管問,有答了再通知你。

舉個例子: 

我去買一本書,立即買到了,這就是非阻塞;

如果恰好書店沒有,我就等一直等到書店有了這本書買到了才走,這就是阻塞;

如果書店恰好沒有,我就告訴書店老闆,書來了告訴我一聲讓我來取或者直接送到我家,然後我就走了,這就是非同步。

那同步呢? 前面兩種情況,非阻塞和阻塞都可以稱為同步。

如果說書店有這書,我還讓老闆通知我以後來取就沒這個必要了。

反映在程式設計方面就是 使用者程序 呼叫 系統呼叫。(使用者程序對應我,核心 對應 書店老闆,書對應資料資源data , 買書就是乙個系統呼叫了)

這阻塞非阻塞與同步非同步io機制,都是伴隨計算機系統發展,用來解決一些出現的問題。阻塞非阻塞、同步非同步可以組合,但是沒必要組合,應該說是不同的io機制,沒必要糾結怎麼區分,如果定要組合心裡才爽,可以 這樣認為:阻塞非阻塞都是同步,非同步就沒什麼阻塞不阻塞了,都非同步了還阻塞啥,肯定是非阻塞了。(非同步非阻塞聽起來多彆扭)

unix網路程式設計中說到:

將io模型分為五類:阻塞io,非阻塞io,io復用,訊號驅動,非同步io

其中阻塞io就是那種recv, read,一直等,等到有了拷貝了資料才返回;

非阻塞就是不用等,立即返回,設定描述符為非阻塞就行了,但是要程序自己一直檢查是否可讀;

io復用其實也是阻塞的,不過可以用來等很多描述符;

訊號驅動採用訊號機制等待;

非同步io就不用等待了,當他告知你的時候,已經可以返回了,資料都拷貝好了。

關於阻塞 非阻塞 非同步 同步

阻塞 比如 recv 這個函式就是阻塞函式,只有讀到資料了才會返回 還有accept 這個函式也是阻塞函式,只有客戶端連線上來了才會返回,不然整個程式都停留在accept出現的地方阻塞著,一直等著有客戶端連線上來accept返回後才繼續執行下去。非阻塞就是和上面相反的意思。同步也就是和阻塞差不多的意...

關於同步 非同步,阻塞 非阻塞

同步與非同步 同步是指兩個或者多少個流程 行為 之間存在依賴關係,比如流程a必須等待流程b結束之後才能結束。反之非同步就是沒有依賴關係。阻塞與非阻塞 阻塞是指流程a在等待其他流程的結果期間,不能做其他事情,被掛起。反之,非阻塞就是可以做其他事情。看了網上很多說法,都有 同步阻塞,同步非阻塞,非同步阻...

關於同步,非同步,阻塞,非阻塞

同步與非同步 同步 發出乙個呼叫,若沒有得到結果,則呼叫不返回 若呼叫返回,那麼一定得到結果了 非同步 發出乙個呼叫,立即返回,沒有返回結果。當被呼叫者有結果了,再通過狀態 通知來告訴呼叫者來獲取結果 核心在訊息通訊機制。乙個典型的例子,非同步io 將呼叫者視作主線程,通常情況下,主線程中會實現乙個...