關於同步 非同步 阻塞 非阻塞的幾點理解

2021-08-11 14:14:47 字數 1406 閱讀 4187

同步與非同步是針對應用程式與核心的互動而言的。同步過程中程序觸發io操作並等待或者輪詢的去檢視io操作是否完成。非同步過程中程序觸發io操作以後,直接返回,做自己的事情,io交給核心來處理,完成後核心通知程序io完成。

應用程序請求i/o操作時,如果資料未準備好,如果請求立即返回就是非阻塞,不立即返回就是阻塞。簡單說就是做一件事如果不能立即獲得返回,需要等待,就是阻塞,否則就可以理解為非阻塞。

小張喜歡喝咖啡,同時養了好多狗;

出場:1. 小張:相當於我們的客戶端程序

2. 小狗大黑:阻塞處理的io函式

3. 小狗大黃:非阻塞處理的io函式

4. 小狗大白、大紅:非同步處理的io函式

同步阻塞:

小張派大黑去看咖啡煮好沒,大黑等咖啡煮開了才回來;

同步非阻塞:

小張派大黃去看咖啡煮好沒,大黃看了一眼就回來了,過了一會,再大黃再去看看咖啡煮好沒;

非同步非阻塞:

小張派大白和大紅去看咖啡煮好沒,大白和大紅到了廚房後,大白就回來告訴小張,大紅已經到廚房啦;過了一會咖啡煮好了,大紅回到客廳告訴小張

非同步阻塞:(這個太傻了,目前還沒遇到)

小張派大白和大紅去看咖啡煮好沒,大白和大紅到了廚房後,一起在那等著;過了一會咖啡煮好了,大紅大白一起回到客廳告訴小張

那麼採用何種方式,要看小張有沒有養這個型別的狗(系統有沒有相關api),在有的情況下,就看小張個人的需求了(業務需求)

老張愛喝茶,廢話不說,煮開水。

出場人物:老張,水壺兩把(普通水壺,簡稱水壺;會響的水壺,簡稱響水壺)。

1 老張把水壺放到火上,立等水開。(同步阻塞)

老張覺得自己有點傻

2 老張把水壺放到火上,去客廳看電視,時不時去廚房看看水開沒有。(同步非阻塞)

老張還是覺得自己有點傻,於是變高階了,買了把會響笛的那種水壺。水開之後,能大聲發出嘀~~~~的噪音。

3 老張把響水壺放到火上,立等水開。(非同步阻塞)

老張覺得這樣傻等意義不大

4 老張把響水壺放到火上,去客廳看電視,水壺響之前不再去看它了,響了再去拿壺。(非同步非阻塞)

老張覺得自己聰明了。

所謂同步非同步,只是對於水壺而言。

普通水壺,同步;響水壺,非同步。

雖然都能幹活,但響水壺可以在自己完工之後,提示老張水開了。這是普通水壺所不能及的。

同步只能讓呼叫者去輪詢自己(情況2中),造成老張效率的低下。

所謂阻塞非阻塞,僅僅對於老張而言。

立等的老張,阻塞;看電視的老張,非阻塞。

情況1和情況3中老張就是阻塞的,媳婦喊他都不知道。雖然3中響水壺是非同步的,可對於立等的老張沒有太大的意義。所以一般非同步是配合非阻塞使用的,這樣才能發揮非同步的效用。

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

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

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

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

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

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