同步 非同步
阻塞 非阻塞
如上兩個概念比較容易混淆, 而且實際情況來看二者有時效果相似, 最主要的相似點就是不需要等別人, 下面簡單總結下自己的認識同步和
非同步 同步和非同步是指發起乙個服務呼叫時,是否需要等待呼叫物件的執行結果. 服務呼叫分為 [傳送命令
,呼叫執行
,讀取結果]
如果需要等待呼叫物件執行完畢後把結果返回給呼叫者, 這樣就是同步的模式
如果a呼叫乙個服務b, a不需要等b的結果返回就直接返回做其他事情, a只需要傳送命令, 等b呼叫執行完畢後通知a進行 讀取結果, 這樣是非同步的
阻塞和非阻塞的概念
二者僅僅是針對i/o操作而言的, 也就是僅僅針對如上步驟中的讀取結果而言的,
阻塞就是io資料沒有ready的時候執行緒就暫停等待
非阻塞就是io資料沒有ready時候我立即返回,並且配合輪詢重試來完成讀取.
上面兩組概念唯一的不同是所描述的問題場景的粒度不同, 同步可以適用在各種上層次的服務呼叫, 阻塞只適用在最細粒度的io讀寫,
如果說把io讀寫也看做乙個服務呼叫, 那麼二者沒有什麼太大區別.
正是因為二者所解決的問題粒度不同, 而本質上是相似的, 所以才會容易混淆, 所以一句話:
涉及到io呼叫,
那麼就是阻塞概念
,涉及到上層的服務呼叫
,那就用同步和非同步
這裡僅僅是根據目前的理解發布的拙見, 如果有理解嚴重錯誤, 請高手不吝指教.
關於阻塞 非阻塞 非同步 同步
阻塞 比如 recv 這個函式就是阻塞函式,只有讀到資料了才會返回 還有accept 這個函式也是阻塞函式,只有客戶端連線上來了才會返回,不然整個程式都停留在accept出現的地方阻塞著,一直等著有客戶端連線上來accept返回後才繼續執行下去。非阻塞就是和上面相反的意思。同步也就是和阻塞差不多的意...
關於同步 非同步,阻塞 非阻塞
同步與非同步 同步是指兩個或者多少個流程 行為 之間存在依賴關係,比如流程a必須等待流程b結束之後才能結束。反之非同步就是沒有依賴關係。阻塞與非阻塞 阻塞是指流程a在等待其他流程的結果期間,不能做其他事情,被掛起。反之,非阻塞就是可以做其他事情。看了網上很多說法,都有 同步阻塞,同步非阻塞,非同步阻...
關於同步,非同步,阻塞,非阻塞
同步與非同步 同步 發出乙個呼叫,若沒有得到結果,則呼叫不返回 若呼叫返回,那麼一定得到結果了 非同步 發出乙個呼叫,立即返回,沒有返回結果。當被呼叫者有結果了,再通過狀態 通知來告訴呼叫者來獲取結果 核心在訊息通訊機制。乙個典型的例子,非同步io 將呼叫者視作主線程,通常情況下,主線程中會實現乙個...