tft每日頭條

 > 生活

 > 阻塞非阻塞和同步異步的區别

阻塞非阻塞和同步異步的區别

生活 更新时间:2024-07-20 17:27:33

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

  • 同步和異步:

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

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

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

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

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

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

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

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

這些都是對的。

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

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

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

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

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

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

舉個通俗的例子:

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

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

  • 阻塞和非阻塞

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

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

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

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

總結:

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

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

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

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

,

更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!

查看全部

相关生活资讯推荐

热门生活资讯推荐

网友关注

Copyright 2023-2024 - www.tftnews.com All Rights Reserved