同步 非同步和阻塞 非阻塞的區別

2022-03-28 03:38:53 字數 1067 閱讀 7174

一、

「阻塞」與"非阻塞"與"同步"與「非同步"不能簡單的從字面理解,提供乙個從分布式系統角度的回答。

1.同步與非同步同步和非同步關注的是訊息通訊機制 (synchronous communication/ asynchronous communication)所謂同步,就是在發出乙個*呼叫*時,在沒有得到結果之前,該*呼叫*就不返回。但是一旦呼叫返回,就得到返回值了。換句話說,就是由*呼叫者*主動等待這個*呼叫*的結果。而非同步則是相反,*呼叫*在發出之後,這個呼叫就直接返回了,所以沒有返回結果。換句話說,當乙個非同步過程呼叫發出後,呼叫者不會立刻得到結果。而是在*呼叫*發出後,*被呼叫者*通過狀態、通知來通知呼叫者,或通過**函式處理這個呼叫。典型的非同步程式設計模型比如node.js舉個通俗的例子:你打**問書店老闆有沒有《分布式系統》這本書,如果是同步通訊機制,書店老闆會說,你稍等,」我查一下",然後開始查啊查,等查好了(可能是5秒,也可能是一天)告訴你結果(返回結果)。而非同步通訊機制,書店老闆直接告訴你我查一下啊,查好了打**給你,然後直接掛**了(不返回結果)。然後查好了,他會主動打**給你。在這裡老闆通過「回電」這種方式來**。

2. 阻塞與非阻塞阻塞和非阻塞關注的是程式在等待呼叫結果(訊息,返回值)時的狀態.阻塞呼叫是指呼叫結果返回之前,當前執行緒會被掛起。呼叫執行緒只有在得到結果之後才會返回。非阻塞呼叫指在不能立刻得到結果之前,該呼叫不會阻塞當前執行緒。還是上面的例子,你打**問書店老闆有沒有《分布式系統》這本書,你如果是阻塞式呼叫,你會一直把自己「掛起」,直到得到這本書有沒有的結果,如果是非阻塞式呼叫,你不管老闆有沒有告訴你,你自己先一邊去玩了, 當然你也要偶爾過幾分鐘check一下老闆有沒有返回結果。在這裡阻塞與非阻塞與是否同步非同步無關。跟老闆通過什麼方式回答你結果無關。

二、同步就是燒開水,要自己來看開沒開;非同步就是水開了,然後水壺響了通知你水開了。

阻塞是燒開水的過程中,你不能幹其他事情(即你被阻塞住了);非阻塞是燒開水的過程裡可以幹其他事情。

同步與非同步說的是你獲得水開了的方式不同。阻塞與非阻塞說的是你得到結果之前能不能幹其他事情。兩組概念描述的是不同的內容。

參考:1、io - 同步,非同步,阻塞,非阻塞 (亡羊補牢篇) 

2、怎樣理解阻塞非阻塞與同步非同步的區別? 

同步阻塞 同步非阻塞 非同步區別

對於發生一次網路io,可以分為兩部分 1 等待資料 阻塞 執行緒一直阻塞等待資料。非阻塞 執行緒傳送請求後,不等待資料,通過輪詢 訊號量等方式去獲取資料是否準備好。2 將資料從核心複製到使用者空間 同步 執行緒自己把資料從核心複製到使用者空間,期間不能做其它事情,一直等待資料複製完畢。非同步 系統核...

同步 非同步 阻塞和非阻塞的區別

在進行網路程式設計時,我們常常見到同步 非同步 阻塞和非阻塞四種呼叫方式。這些方式彼此概念並不好理解。下面是我對這些術語的區別。所謂同步,就是在發出乙個功能呼叫時,在沒有得到結果之前,該呼叫就不返回。按照這個定義,其實絕大多數函式都是同步呼叫 例如sin,isdigit等 但是一般而言,我們在說同步...

同步,非同步,阻塞和非阻塞的區別

一 概念 非同步 某個事情需要10s完成。而我只需要呼叫某個函式告訴 來幫我做 然後我再幹其他的事情 同步 某個事情需要10s完成,我需要一直等它完成 等10s 再能繼續後面的工作。阻塞 做某件事情,直到完成,除非超時 非阻塞 嘗試做,如果不能做,就不做 直接返回 如果能做,就做。前兩者和後兩者不容...