關於 同步非同步 和 阻塞非阻塞 的個人理解

2021-07-03 07:43:06 字數 736 閱讀 8159

同步 非同步

阻塞 非阻塞

如上兩個概念比較容易混淆, 而且實際情況來看二者有時效果相似, 最主要的相似點就是不需要等別人, 下面簡單總結下自己的認識同步和

非同步 同步和非同步是指發起乙個服務呼叫時,是否需要等待呼叫物件的執行結果.  服務呼叫分為 [傳送命令

,呼叫執行

,讀取結果]

如果需要等待呼叫物件執行完畢後把結果返回給呼叫者, 這樣就是同步的模式

如果a呼叫乙個服務b, a不需要等b的結果返回就直接返回做其他事情, a只需要傳送命令,  等b呼叫執行完畢後通知a進行 讀取結果, 這樣是非同步的

阻塞和非阻塞的概念

二者僅僅是針對i/o操作而言的, 也就是僅僅針對如上步驟中的讀取結果而言的, 

阻塞就是io資料沒有ready的時候執行緒就暫停等待

非阻塞就是io資料沒有ready時候我立即返回,並且配合輪詢重試來完成讀取.

上面兩組概念唯一的不同是所描述的問題場景的粒度不同,  同步可以適用在各種上層次的服務呼叫, 阻塞只適用在最細粒度的io讀寫, 

如果說把io讀寫也看做乙個服務呼叫, 那麼二者沒有什麼太大區別.

正是因為二者所解決的問題粒度不同, 而本質上是相似的, 所以才會容易混淆, 所以一句話:

涉及到io呼叫,

那麼就是阻塞概念

,涉及到上層的服務呼叫

,那就用同步和非同步

這裡僅僅是根據目前的理解發布的拙見, 如果有理解嚴重錯誤, 請高手不吝指教. 

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

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

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

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

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

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