非同步的概念 和多執行緒混淆

2021-05-27 10:06:50 字數 1910 閱讀 4395

我認為大家將非同步的概念 和多執行緒混淆在一起了

舉個簡單的例子,  假設我要做 燒開水,舉槓鈴100下, 洗衣服 3件事情。

燒開水 這件事情,  我要做的事情為, 準備燒開水 1分鐘, 等開水燒開 8 分鐘 , 關掉燒水機 1分鐘

舉槓鈴100下        我要做的事情為,  舉槓鈴100下  10分鐘

洗衣服            我要做的事情為, 準備洗衣服 1分鐘, 等開水燒開 5 分鐘 , 關掉洗衣機 1分鐘

單核情況下

同步的完成,我需要做的時間為 1+ 8 +1 + 10 + 1+ 5 +1 = 27 分

如果非同步,就是在等的時候,我可以切換去做別的事情

準備燒開水(1) + 準備洗衣服(1) + 舉50下槓鈴 (5)分鐘+ 關洗衣機 1分鐘 + 舉槓鈴20下 (2)分鐘+ 關燒水機 1分鐘 + 舉30下槓鈴(3)分鐘

1+1+5+1+2+1+3 =14 分鐘

多核雙核 非同步 並行

核1  準備燒開水 1分鐘+ 舉槓鈴50下(5)分鐘+ 等待3分鐘 + 關掉燒水機 1分鐘

核2  準備洗衣服 1分鐘+ 舉槓鈴50下(5)分鐘+ 關掉洗衣機 1分鐘 + 等待3分鐘

其實只花了 1+5+3+1 = 10分鐘

其中還有雙核都等待了3分鐘

雙核 非同步 非並行

核1  舉槓鈴100下(10)分鐘

核2  準備燒開水 1分鐘+ 準備洗衣服 1分鐘+ 等待5 分鐘+ + 關掉燒水機 1分鐘  + 等待 1 分鐘 + 關掉洗衣機 1分鐘

其實只花了 1+5+3+1 = 10分鐘

多執行緒的做法

單核下執行緒1  準備燒開水 1分鐘, 等開水燒開 8 分鐘 , 關掉燒水機 1分鐘

執行緒2  舉槓鈴100下  10分鐘

執行緒3  準備洗衣服 1分鐘, 等開水燒開 5 分鐘 , 關掉洗衣機 1分鐘

cpu 可能這麼切換 最理想的切換方式

執行緒1  準備燒開水1  sleep  1          sleep 5            sleep 1          sleep 2          關開水 1分鐘 exit

執行緒2    sleep 1      sleep  1            舉槓鈴50 5分鐘    sleep 1          舉槓鈴20 2分鐘  sleep1      舉槓鈴30下 3分鐘      

執行緒3    sleep  1      準備洗衣服1 分鐘    sleep 5            關洗衣機1分鐘    exit

最後使用了  14分鐘  和非同步是一樣的。

但是實際上是不一樣的,因為執行緒不會按照我們設想的去跑, 如果執行緒2 舉槓鈴先跑,整個流程的速度就下來了。

非同步和同步的區別,  在io等待的時候,同步不會切走,浪費了時間。

如果都是獨佔cpu 的業務, 比如舉槓鈴的業務, 在單核情況下 多線和單線 沒有區別。

多執行緒的好處,比較容易的實現了 非同步切換的思想, 因為非同步的程式很難寫的。多執行緒本身程還是以同步完成,但是應該說

比效率是比不上非同步的。 而且多線很容易寫, 相對效率也高。

多核的好處,就是可以同時做事情, 這個和單核完全不一樣的。

至於多核執行 這3個執行緒的情況 就留給你們自己完成了。

本人水平有限, 有錯誤請指出

舉例:  

離你很遠的地方有個很漂亮的女網友,你想知道她到底對你如何,你通過郵政禮儀,寄給她一支玫瑰(相當於非同步呼叫)。因為回執要等很多天,所以,你這些天不必整天傻等回執,可以照樣吃飯工作(處理些簡單的事務),當然,如果你這些天又泡到個mm,這時你就要選擇,如果也用非同步的方法,當然沒問題,因為哪個回執先回來,先處理那個,但如果你對後面這個mm採用同步方式,那你只能解決掉這個同步的mm後,才能處理前面那個回執,不管那個回執何時到達。  

這和多執行緒也有點不同,多執行緒是兩個**泡兩個mm,自己泡自己的。  

嘿嘿  

多執行緒和非同步

非同步執行緒 前台執行緒 後台執行緒 預設前台執行緒 有執行緒的取消 完成 失敗通知等互動性操作 通過jion阻塞,達到執行緒執行的先後次序 預設後台執行緒 無線程的取消 完成 失敗通知等互動性操作 可以減少每次建立執行緒的開銷 static void main string args 主線程執行完...

多執行緒和非同步

c 中非同步和多執行緒的區別是什麼呢?非同步和多執行緒兩者都可以達到避免呼叫執行緒阻塞的目的,從而提高軟體的可響應性。甚至有些時候我們就認為非同步和多執行緒是等同的概念。但是,非同步和多執行緒還是有一些區別的。而這些區別造成了使用非同步和多執行緒的時機的區別。所有的程式最終都會由計算機硬體來執行,所...

非同步和多執行緒的關係

非同步通訊的意思是,當a傳送完訊息之後,不等待b的回應,繼續執行之後的程式.在將來的某個時刻,a再來檢查是否收到b的回應。非同步就是彼此獨立,在等待某事件的過程中繼續做自己的事,不需要等待這一事件完成後再工作。多執行緒是程式設計的邏輯層概念,它是程序中併發執行的一段 多執行緒可以實現執行緒間的切換執...