新四季網

阻塞非阻塞和同步異步的區別(極容易混淆的概念)

2023-09-21 23:04:22

工作了有一段時間了,但是今天看到這個問題時自己先想了想,大概能明白同步和異步的區別,但是阻塞和非阻塞就想不清楚了,後來網上查閱了好多資料,甚至好多資料裡邊的解釋都是不一樣的,下面我用用我能理解的最簡單的語言給大家解釋一下這些區別,僅供參考,如有不同意見,歡迎砸磚。

同步和異步:

同步和異步是在線程層次來說的,同步的情況下,是由處理消息者自己去等待消息是否被觸發,而異步的情況下是由觸發機制來通知處理消息者,同步和異步最大的區別就在於。一個需要等待,一個不需要等待。

比如廣播,就是一個異步例子。發起者不關心接收者的狀態。不需要等待接收者的返回信息

電話,就是一個同步例子。發起者需要等待接收者,接通電話後,通信才開始。需要等待接收者的返回信息

同步:發送一個請求,等待返回,然後再發送下一個請求

異步:發送一個請求,不等待返回,隨時可以再發送下一個請求

從圖中可以看出同步是發送一個消息,返回一個消息,在這之間不會做別的事,需要等待只是在等待消息返回,幾次發送消息是有順序的,這是一種可靠的任務序列。要麼成功都成功,失敗都失敗。而異步是不需要等待被依賴的任務完成,只是通知被依賴的任務要完成什麼工作,依賴的任務也立即執行,只要自己完成了整個任務就算完成了。至於被依賴的任務最終是否真正完成,依賴它的任務無法確定,所以它是不可靠的任務序列。

同步可以避免出現死鎖,讀髒數據的發生,一般共享某一資源的時候用,如果每個人都有修改權限,同時修改一個文件,有可能使一個人讀取另一個人已經刪除的內容,就會出錯,同步就會按順序來修改。

異步則是可以提高效率了,現在cpu都是雙核,四核,異步處理的話可以同時做多項工作,當然必須保證是可以並發處理的。

這些都是對的。

下面來看網上的一個解釋:

同步和異步關注的是消息通信機制 (synchronous communication/ asynchronous communication)

所謂同步,就是在發出一個*調用*時,在沒有得到結果之前,該*調用*就不返回。但是一旦調用返回,就得到返回值了。

換句話說,就是由*調用者*主動等待這個*調用*的結果。

而異步則是相反,*調用*在發出之後,這個調用就直接返回了,所以沒有返回結果。換句話說,當一個異步過程調用發出後,調用者不會立刻得到結果。而是在*調用*發出後,*被調用者*通過狀態、通知來通知調用者,或通過回調函數處理這個調用。

典型的異步編程模型比如Node.js

舉個通俗的例子:

你打電話問書店老闆有沒有《分布式系統》這本書,如果是同步通信機制,書店老闆會說,你稍等,」我查一下",然後開始查啊查,等查好了(可能是5秒,也可能是一天)告訴你結果(返回結果)。

而異步通信機制,書店老闆直接告訴你我查一下啊,查好了打電話給你,然後直接掛電話了(不返回結果)。然後查好了,他會主動打電話給你。在這裡老闆通過「回電」這種方式來回調。

阻塞和非阻塞

阻塞與非阻塞主要是從 CPU 的消耗上來說的,阻塞和非阻塞應該是發生在消息的處理的時刻。阻塞其實就是等待,發出通知,等待結果完成。非阻塞屬於發出通知,立即返回結果,沒有等待過程。

阻塞就是 CPU 停下來等待一個慢的操作完成 CPU 才接著完成其它的事。非阻塞就是在這個慢的操作在執行時 CPU 去幹其它別的事,等這個慢的操作完成時,CPU 再接著完成後續的操作。雖然表面上看非阻塞的方式可以明顯的提高 CPU 的利用率,但是也帶了另外一種後果就是系統的線程切換增加。增加的 CPU 使用時間能不能補償系統的切換成本需要好好評估。

打個比喻吧:司機開車在路上阻車了,如果採用阻塞模式,則司機停下來什麼事也不幹,就眼巴巴地直等前面的車啟動,他繼續跟車。如果採用非阻塞模式,則前面阻車後,司機停下來看報紙,聽音樂,等前面車走動後,他再放下報紙,繼續跟車。

總結:

同步異步是在線程層次來說的,阻塞非阻塞是在cpu層次來說的,層次不同

同步與異步:是自己去做這件事情,自己拿結果(同步),還是等別人做好了來通知有結果(異步),注意這裡說的是拿結果。通常異步效率比較高,因為不用等待,同步效率比較低,要等待。同步:發送一個請求,等待返回,然後再發送下一個請求,異步:發送一個請求,不等待返回,隨時可以再發送下一個請求

阻塞非阻塞區別在於完成一件事情時,當事情還沒有完成時,處理這件事情的人除此之外還能不能再做別的事情;能的話就是非阻塞,不能就是阻塞。

如果覺得我的文章對你有幫助,請關注我或者點讚,後續會有更好的文章,謝謝。

,
同类文章
葬禮的夢想

葬禮的夢想

夢見葬禮,我得到了這個夢想,五個要素的五個要素,水火只好,主要名字在外面,職業生涯良好,一切都應該對待他人治療誠意,由於小,吉利的冬天夢想,秋天的夢是不吉利的
找到手機是什麼意思?

找到手機是什麼意思?

找到手機是什麼意思?五次選舉的五個要素是兩名士兵的跡象。與他溝通很好。這是非常財富,它擅長運作,職業是仙人的標誌。單身男人有這個夢想,主要生活可以有人幫忙
我不怎麼想?

我不怎麼想?

我做了什麼意味著看到米飯烹飪?我得到了這個夢想,五線的主要土壤,但是Tu Ke水是錢的跡象,職業生涯更加真誠。他真誠地誠實。這是豐富的,這是夏瑞的巨星
夢想你的意思是什麼?

夢想你的意思是什麼?

你是什​​麼意思夢想的夢想?夢想,主要木材的五個要素,水的跡象,主營業務,主營業務,案子應該抓住魅力,不能疏忽,春天夢想的吉利夢想夏天的夢想不幸。詢問學者夢想
拯救夢想

拯救夢想

拯救夢想什麼意思?你夢想著拯救人嗎?拯救人們的夢想有一個現實,也有夢想的主觀想像力,請參閱週宮官方網站拯救人民夢想的詳細解釋。夢想著敵人被拯救出來
2022愛方向和生日是在[質量個性]中

2022愛方向和生日是在[質量個性]中

[救生員]有人說,在出生88天之前,胎兒已經知道哪天的出生,如何有優質的個性,將走在什麼樣的愛情之旅,將與生活生活有什么生活。今天
夢想切割剪裁

夢想切割剪裁

夢想切割剪裁什麼意思?你夢想切你的手是好的嗎?夢想切割手工切割手有一個真正的影響和反應,也有夢想的主觀想像力。請參閱官方網站夢想的細節,以削減手
夢想著親人死了

夢想著親人死了

夢想著親人死了什麼意思?你夢想夢想你的親人死嗎?夢想有一個現實的影響和反應,還有夢想的主觀想像力,請參閱夢想世界夢想死亡的親屬的詳細解釋
夢想搶劫

夢想搶劫

夢想搶劫什麼意思?你夢想搶劫嗎?夢想著搶劫有一個現實的影響和反應,也有夢想的主觀想像力,請參閱週恭吉夢官方網站的詳細解釋。夢想搶劫
夢想缺乏缺乏紊亂

夢想缺乏缺乏紊亂

夢想缺乏缺乏紊亂什麼意思?你夢想缺乏異常藥物嗎?夢想缺乏現實世界的影響和現實,還有夢想的主觀想像,請看官方網站的夢想組織缺乏異常藥物。我覺得有些東西缺失了