同步與非同步:
同步:發出乙個呼叫,若沒有得到結果,則呼叫不返回;若呼叫返回,那麼一定得到結果了
非同步:發出乙個呼叫,立即返回,沒有返回結果。當被呼叫者有結果了,再通過狀態、通知來告訴呼叫者來獲取結果
核心在訊息通訊機制。
乙個典型的例子,非同步io:
將呼叫者視作主線程,通常情況下,主線程中會實現乙個訊息迴圈。
訊息迴圈的作用是讀取訊息-處理訊息。
讀取的訊息取自訊息佇列,所謂的訊息佇列,就是將當我們的操作(點選滑鼠,鍵盤等)視作訊息,多個訊息組成的佇列叫做訊息佇列。
這樣,發出乙個io請求r1之後,從主線程這一邊來看,就相當於訊息佇列裡多了乙個訊息。
主線程讀取r1之後,再建立乙個執行緒t1來處理r1,但不等待處理結果,而是立即返回到主線程,繼續處理請求r2,r3....
等t1處理r1完畢,再通知主線程獲取處理結果。
阻塞與非阻塞:
阻塞:在被呼叫者返回結果之前,呼叫者掛起。呼叫者在得到結果之後再返回。
非阻塞:在被呼叫者返回結果之前,呼叫者不會被阻塞。
關注的是呼叫者在等待被呼叫者返回結果時的狀態。
注:以上敘述中,「結果」指的是被呼叫者返回的值,呼叫者,被呼叫者都可當作執行緒來理解。
關於阻塞 非阻塞 非同步 同步
阻塞 比如 recv 這個函式就是阻塞函式,只有讀到資料了才會返回 還有accept 這個函式也是阻塞函式,只有客戶端連線上來了才會返回,不然整個程式都停留在accept出現的地方阻塞著,一直等著有客戶端連線上來accept返回後才繼續執行下去。非阻塞就是和上面相反的意思。同步也就是和阻塞差不多的意...
關於同步 非同步,阻塞 非阻塞
同步與非同步 同步是指兩個或者多少個流程 行為 之間存在依賴關係,比如流程a必須等待流程b結束之後才能結束。反之非同步就是沒有依賴關係。阻塞與非阻塞 阻塞是指流程a在等待其他流程的結果期間,不能做其他事情,被掛起。反之,非阻塞就是可以做其他事情。看了網上很多說法,都有 同步阻塞,同步非阻塞,非同步阻...
阻塞,非阻塞,非同步,同步
之前一直對這個概念理不太清楚,今天看到一篇文章感覺不錯 本文 老張愛喝茶,廢話不說,煮開水。出場人物 老張,水壺兩把 普通 水壺,簡稱水壺 會響的水壺,簡稱響水壺 1 老張把水壺放到火上,立等水開。同步阻塞 老張覺得自己有點傻 2 老張把水壺放到火上,去客廳看電視,時不時去廚房看看水開沒有。同步非阻...