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

2022-09-15 14:09:17 字數 1192 閱讀 6036

一、同步與非同步的區別:

同步:乙個服務的完成需要依賴其他服務時,只有等待被依賴的服務完成後,才算完成,這是一種可靠的服務序列。要麼成功都成功,失敗都失敗,服務的狀態可以保持一致

非同步:乙個服務的完成需要依賴其他服務時,只通知其他依賴服務開始執行,而不需要等待被依賴的服務完成,此時該服務就算完成了。被依賴的服務是否最終完成無法確定,一次它是乙個不可靠的服務序列。

訊息通知中的同步和非同步:

呼叫者獲取非同步呼叫服務結果的兩種方式:一種是主動去輪訓查詢非同步**的結果,一種呼叫依賴服務時傳入乙個callback方法或者**位址,依賴服務完成之後去呼叫callback通知呼叫者,一般情況,這兩種方式都要支援才是一種良好的非同步**設計方法。

場景比喻:

小明去買奶茶,可能會有兩種方式

所以: 同步與非同步著重點在訊息通知的方式,也就是呼叫結果通知的方式。結合場景就是,拿到奶茶的方式。

二、阻塞與非阻塞的區別

阻塞:阻塞呼叫是指呼叫結果返回之前,當前執行緒會被掛起,一直處於等待訊息通知,不能夠執行其他業務,函式只有在得到結果之後才會返回。

非阻塞:非阻塞和阻塞的概念相對應,指在不能立刻得到結果之前,該函式不會阻塞當前執行緒,而會立刻返回。

雖然表面上看非阻塞的方式可以明顯的提高cpu的利用率,但是也帶了另外一種後果就是系統的執行緒切換增加

阻塞呼叫和同步呼叫不同的。對於同步呼叫來說,很多時候當前執行緒可能還是啟用的,只是從邏輯上當前函式沒有返回而已,此時,這個執行緒可能也會處理其他的訊息。  

還有一點,在這裡先擴充套件下:  

(a) 如果這個執行緒在等待當前函式返回時,仍在執行其他訊息處理,那這種情況就叫做同步非阻塞;  

(b) 如果這個執行緒在等待當前函式返回時,沒有執行其他訊息處理,而是處於掛起等待狀態,那這種情況就叫做同步阻塞;  

所以同步的實現方式會有兩種:同步阻塞、同步非阻塞;同理,非同步也會有兩種實現:非同步阻塞、非同步非阻塞;  

對場景比喻:

還是小明去買奶茶,可能會有兩種方式

同步阻塞:小明在等著取奶茶的時候呢,啥都不幹,就等著;小明等奶茶的行為就叫做阻塞,小明在等奶茶的時候,阻塞了!而這種方式又叫做同步阻塞。

非同步阻塞:奶茶妹給了小明乙個小票,然後小明還是傻等著;小明這種拿到票還傻等著的行為,就叫阻塞。而這種行為,又叫做非同步阻塞!這種最傻了。

所以:阻塞與非阻塞的著重點在於當前執行緒等待訊息返回的行為。換成場景就是,小明等奶茶的行為。

總結:

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

一 同步與非同步的區別 同步 乙個服務的完成需要依賴其他服務時,只有等待被依賴的服務完成後,才算完成,這是一種可靠的服務序列。要麼成功都成功,失敗都失敗,服務的狀態可以保持一致 非同步 乙個服務的完成需要依賴其他服務時,只通知其他依賴服務開始執行,而不需要等待被依賴的服務完成,此時該服務就算完成了。...

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

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

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

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