個人對同步非同步,阻塞非阻塞的理解

2021-07-04 02:45:54 字數 834 閱讀 9551

以下內容純屬個人理解,如有錯誤,歡迎指出討論…

我們經常把同步非同步,阻塞非阻塞,當作單獨的兩個塊來理解,就單獨針對同步非同步理解起來不難,單獨針對阻塞非阻塞理解起來似乎也不難…但是兩個塊放到一起理解似乎總有點含糊不清的感覺…然後有人得出」同步就阻塞,非同步就非阻塞」的錯誤觀念…

說個我覺得比較好理解但是難登大雅之堂的例子:

同步:喝一杯水,坐在馬桶上等尿…

非同步:喝一杯水,出去浪了,等膀胱通知大腦想尿尿了再尿…

(同步)阻塞:專心致志的坐在馬桶上,將自己掛起什麼事也不幹,就做安心等尿這一件事

(同步)非阻塞:坐在馬桶上等尿,但是還可以玩玩手機看看報,然後過段時間就自我感覺下有沒有尿…

有人看的這裡產生疑惑了,那個」(同步)非阻塞」和」非同步」不是一回事嗎?都是能幹別的事情,大家注意:

「非同步」自身是無需關注的結果的,就是喝完水之後即使今天不尿明天不尿這輩子都不尿也無所謂,該幹嘛就幹嘛去,自然等膀胱通知就行了,通知有尿了再去尿…

而」(同步)阻塞或非阻塞」我說一直坐在馬桶上是表示自己時刻都在關注這個結果的,必須得有個結果(阻塞死等結果,非阻塞輪詢檢視),即要麼就尿出來,要麼確定」這輩子都尿不出來了」,總之得有這個等尿的結果出現…

又有人問了,阻塞和非阻塞都是針對同步嗎?那非同步有阻塞和非阻塞嗎?

非同步給人的印象一直是非阻塞的…

其實我個人覺得針對什麼來說吧,若針對單個執行緒來說,那麼非同步的某個執行緒在一直等待結果的時候也是會出現阻塞的,但是是針對說這個執行緒阻塞了,只不過」非同步的結果」看起來是非阻塞的,因為發起者根本就無須關注這個結果…假設花了1萬年等到乙個結果,你說它難道沒有被阻塞嗎?只不過程式本身並不關注花了多久時間,也並不關注是否有結果,有就有,沒有就沒有…

非同步,同步,阻塞,非阻塞個人理解

同步 所謂同步,就是函式在發出乙個功能呼叫過程時,在過程沒有完成結束前,函式也是得不到返回的。按照這個定義,其實絕大多數函式都是同步呼叫 例如sin,isdigit等 但是一般而言,我們在說同步 非同步的時候,特指的是那些需要其他部件協作或者需要一定時間完成的任務。最常見的例子就是 sendmess...

對 同步 非同步 阻塞 非阻塞的理解

老張愛喝茶,廢話不說,煮開水。出場人物 老張,水壺兩把 普通水壺,簡稱水壺 會響的水壺,簡稱響水壺 1 老張把水壺放到火上,立等水開。同步阻塞 老張覺得自己有點傻 2 老張把水壺放到火上,去客廳看電視,時不時去廚房看看水開沒有。同步非阻塞 老張還是覺得自己有點傻,於是變高階了,買了把會響笛的那種水壺...

同步 非同步,阻塞 非阻塞理解

由於同步非同步,阻塞非阻塞都學習了有一段時間了。慢慢了快忘了,所以乾脆趁著寒假把知識點都撿起來,寫出來。同步和非同步是一組概念,阻塞和非阻塞是一組概念。大家不要搞混了,不要把同步和阻塞等價,也不要把非同步和非阻塞等價 戲說不是胡說,改編不是亂編 滑稽 在剛開始理解的時候很容易搞混,我們這樣想,同步和...