多執行緒有什麼用?

時間 2021-05-07 03:28:27

1樓:bjjiNight

這麼理解,比如一群人到樓頂要坐電梯,從樓下坐到樓上就是乙個程序,裡面的人就是執行緒(資源排程和執行),電梯上樓下樓的速度是不變的,但是要把所有的人帶到樓上,單核單執行緒就是一次只帶乙個人,單核多執行緒則是一次帶兩個或者多個人,電梯速度是不變的,但把所有人帶上樓頂的時間卻不一樣,電梯可以認成cpu,cpu的處理速度沒有變,但是卻得到更充分的利用,讓人們邏輯上認為電梯速度變快了,多核可以認作多個電梯。。

2樓:分布式程式設計

1:快速響應

陸續收到a,b,c三個任務,a需要60s,b需要10s,c需要1s,如果是單執行緒序列執行肯定是c最後執行完成,這肯定是不合理的.如果多執行緒的話c是可能先執行完成的

2:充分利用系統資源(cpu,網絡卡,記憶體,硬碟)如果是單執行緒的我們只能使用同時使用乙個資源cpu或者網絡卡多執行緒的話可以a執行緒在等待網路io,b執行緒在使用cpu計算

3樓:若有迴響

我把我理解的說說:

還是用餐館,乙個核心代表乙個廚師對應一張桌子,乙個執行緒代表乙個顧客。

當乙個普通顧客來餐館就餐時,單執行緒意味著一張桌子只能坐乙個人,這個人在進食的時候廚師是空閒的。雙線程意味著一張桌子可以做兩個人,乙個人吃著另乙個人點餐,廚師一直處於做菜的狀態,沒有空閒。

4樓:嘶吼

單執行緒和多執行緒的比對

單執行緒的特點就是排隊執行,就像在cmd終端中輸入一條命令後,必須等待這條命令執行完才可以執行下一條命令一樣。這就是單執行緒環境的缺點,即CPU利用率大幅降低。

多執行緒是用來幫助CPU提高使用效率,可以最大限度的利用CPU的空閒時間來處理其他的任務。

多執行緒的好處

單執行緒就只能按順序的執行任務,舉個例子,比如用單執行緒的方式來做菜和蒸飯,你只能選擇其中乙個,你要是蒸飯就不能做菜,要是做菜就不能蒸飯。但是多執行緒的方式就可以用蒸飯的空餘時間拿來做菜。

多執行緒的劣勢

但是有的時候使用多執行緒就沒用辦法提高效率,比如你想學習又想睡覺,多執行緒的方式來解決就是你睡一會覺學一會習,交叉同步進行,顯然大部分的時間都浪費在切換任務當中,結果就是東西沒學著,覺也沒睡好。要是以單執行緒的方式來解決這個問題:你要麼先睡覺要麼先學習,這個時候用單執行緒來解決就顯的很合適。

所以具體使用哪種執行緒還需根據實際環境來決定。

多執行緒主要優點如下:

1. 多執行緒技術使程式的響應速度更快 ,因為使用者介面可以在進行其它工作的同時一直處於活動狀態。

2. 占用大量處理時間的任務使用多執行緒可以提高CPU的利用率,即占用大量處理時間的任務可以定期將處理器時間讓給其它任務。相反對於處理時間短的服務或者啟動頻率高的要用單執行緒。

3. 多執行緒可以分別設定優先順序以優化效能。

多執行緒程式設計的目的:就是"最大限度地利用CPU資源"。

5樓:子非魚

關於多程序和多執行緒我看很多人舉了各種各樣的例子,確實有很多例子可以模擬,但是有些例子我覺得是不恰當的。在使用生活中的例子來幫助理解多執行緒多程序時我覺得最重要的是找到程序和執行緒的模擬物件。比如桌子吃飯那個,人是相當於執行緒,桌子是相當於程序。

其實軟體最終的競爭還是硬體資源(主要是cpu,記憶體,磁碟)的競爭,而多程序多執行緒的產生就是為了更好的利用cpu資源,或者提高cpu資源的利用率。目前的作業系統乙個程序至少包含乙個執行緒。

回到問題,多執行緒有什麼用?

現在我們的辦公筆記本都是多核的cpu(相當於多個cpu)了,何況伺服器的cpu。所以如果你的伺服器是8核cpu,你的程序只啟動了乙個執行緒(乙個執行緒占用乙個cpu),理想狀態下你還有7個核沒有用到,這不是浪費嗎?還有乙個原因如果系統(程序)對實時性要求比較高,如果你的程序需要處理乙個大任務, 本來由乙個執行緒(占用乙個cpu),你現在將它切割,同時交給8個執行緒處理(占用8個cpu),是比你單執行緒處理快的,這就是多執行緒的用處。

程式設計中多執行緒才是核心競爭力。

6樓:啟明

單程序單執行緒:就像是要從a地到b地,乙個人,就一種方法,只要能到就完事兒了。

單程序多執行緒:還是從a地到b地,幾個人做同一件事,將整條路程分成幾份,多個人在自己的位置上,同時出發,只要總路程能連線成一條完整的線就行。

多程序多執行緒:從ABCDEF地出發分別要到a、b、c、d、e、f,5個地方。每個目標都有幾個人去做。

反正我是這麼理解的。

7樓:guoking

我的理解是乙個程式(載入記憶體被cpu執行的了就是程序了)的多個部分同時執行的話,那麼就會更快的完成,尤其是多個部分是需要協作的,這個部分出了結果,那個部分剛好執行到要用這個結果,那感覺不能更爽。之前的單核時代,cpu還要在不同部分跳來跳去的,現在的多核時代,乙個cpu跑一段,爽得不能更爽。這是我學的時候寫的一篇部落格,乙個很簡單的例子,但是把用處說清楚了。

c# multi thread programming ,c# 多執行緒程式設計

如果有作業系統的基本概念,這個就是不會模糊了。把程式想象成乙個長條的0110序列在記憶體中,cpu在上面跑。

8樓:

乙個簡單的N皇后多執行緒求解例子:wlgq2/cpp_hodgepodges

實際測試15皇后單執行緒求解CPU占用穩定25% 算了28秒。

開四個執行緒CPU一下佔滿100%,算了8秒完成。

用的C++11的執行緒。

9樓:Hail Hydra

為了講清楚多執行緒程式設計,這兒先講乙個場景,

這個場景是這樣子的,山上有座廟(程序),廟裡住了很多小和尚和老和尚(執行緒),當然隔壁山上也有很多尼姑妹子。小和尚和老和尚們每天都需要下山挑水喝。這些個和尚有剛上山的(就是有點傻的),有比較聰明的,也有鬧過矛盾的。

場景,人物呢,大概就是這麼個樣子。

俗話說的好,有人的地方就有江湖。這些個小和尚,老和尚都不是很安分,為了每天的這個挑水工作鬧了很多很多的矛盾,也犯過很多傻。

下面對挑水工作所有發生的情況做個詳述:

1)剛上山的小和尚挑水,就是比較傻的那個,和別人都不認識,每天挑水都自己乙個人,一次挑一桶水,一天下來發現挑的水根本不夠喝。(序列

2)和尚裡面有個力氣大的,和別人關係不好,每次挑水能挑三桶左右,一天下來,發現挑的水勉強夠喝。 (併發

3)和尚裡面有幾個關係好的,力氣也比較大,每次挑水都一起去,每個人都能挑兩桶左右,一天下來,發現挑的水不僅夠喝,還有時間幫隔壁山尼姑妹子挑水。 (並行

4)在水井裡打水,有個專門的妹子負責打水,比較傻的那個小和尚每次都盯著打水的妹子,還隨時隨地看水桶裝滿沒有(同步);當然,有傻的,也有聰明的,這個聰明的和尚在妹子打水的時候,就乘機在一旁休息,水打滿以後,妹子都過來告訴他。(非同步

5)水井裡有一天沒水了,傻和尚看見水井裡沒水以後,在水井邊上一直等著,等有水了再挑回去(阻塞);聰明和尚呢,看見水井裡沒水了,一點都不猶豫的回去了。(非阻塞

6)又有一天,那鬧過矛盾的兩個和尚挑水,正好狹路相逢,誰也不讓誰過去,一直僵持著。(死鎖

7)寺廟裡廚房空間有限,每次只能進去一定數量的和尚,當廚房滿了以後,其他人只能在外面等著,直到裡面的人出來。這個實現的方法是,廚房門口掛了很多鎖,每個人進去以後都拿走一把鎖,出來以後把鎖掛上,這樣外面的人就可以知道廚房裡面人滿沒滿。(訊號量

終於編完了。。。

通過上面生動形象的描述,這個執行緒裡面的一些概念已經明白了。

下面解釋下多執行緒。

還是上面的例子,在這個寺廟裡面,如果每天都由那個新來的傻子和尚挑水喝,肯定是不行的,有的喝沒得喝咱且不說,你讓他累死了咋整。何況寺廟裡那麼些個空著的水桶那麼些個不幹活的人閒著也是閒著。

所以多執行緒的意思就是多個執行緒一起去協同完成乙個任務,通過充分去共享資源來達到提公升效率的一種程式設計思想。

當然,在這個過程中會遇到很多麻煩,比如會碰上死鎖的問題,同時去爭搶同乙個資源的問題等等。

為了解決這個問題,iOS裡是使用加鎖這個方法避免,當然,使用鎖,會在一定的程度上印象執行的效率,我們需要在效率和安全之間尋找乙個平衡點。

10樓:岡崎鏡

說一點自己知道的,在乙個程式中多執行緒有什麼用。如有說的不對懇請指出。

乙個常見但不算典型多執行緒應用的場景是,web程式處理請求。每個請求的處理可能需要走以下幾步:

收到請求,呼叫處理類/函式;

分析請求,得知要獲取的資料;

連線資料庫或者讀取相關檔案;

計算得出結果;

返回響應資料。

我們知道,無論你有多少個執行緒,實際上最終決定平行計算量的是CPU的核心個數,只是CPU切換任務的速度對於人的感知來說相對快,所以在使用計算機時會覺得它能夠同時做好多個事情。假如乙個程式只有乙個執行緒,它每次排隊等候CPU使用時間都只有乙個名額,自身的執行也要按順序一步一步走下來。前一步未完成,下一步就不會執行。

實際上很多時間我們並不需要等候上一步完成,就可以先行做下一步,以達到最大化利用計算機內的各種資源(不僅僅是CPU)來最快地完成任務的目的。

在上面的例子中,最能夠反映這一點的就是連線資料庫及讀取檔案的操作(尤其在讀取多個檔案時),即I/O操作。單次I/O操作相對來說是比較花時間的(即開銷大),我們可以開乙個新執行緒去連線、等候、獲取資料然後返回。同時,讓原有的執行緒繼續執行不需要用到I/O結果的部分。

等到I/O執行緒返回(讀取完成的事件發生),再取得這分部資料去進行相關的計算或者操作。

另乙個例子,Python中有個名為paramiko的庫,實現了ssh的功能。它通過ssh協議與遠端機器的類建立連線的Transport類就用到了多執行緒:

class

Transport

(threading

.Thread

,ClosingContextManager

):""" An SSH Transport attaches to a stream (usually a socket),

negotiates an

encrypted session, authenticates, and then creates stream tunnels, called

`channels <.Channel>`, across the session. Multiple channels can be multiplexed across a single session (and often are, in the case of port forwardings).

Instances of this class may be used as context managers. """

...當你需要同時向多台遠端計算機傳輸檔案時,可為每一台計算機建立乙個Transport例項(即新開乙個執行緒),然後同時進行傳輸。這樣程式就不需要等到一台機器完成傳輸後再去下一台機器操作了。

多核多執行緒cpu在日長中有什麼用?

輕逝花落空 那要看你的應用是更耗顯示卡一些還是更耗處理器。其實不是 最近 而是十年前CPU就進入了多核時代,現在不管電腦還是智慧型手機上的程式,都對多核心有優化,可以說你用電腦和智慧型裝置的時候無時不刻不在使用多執行緒,所以這個 有什麼用 無從談起了。如果現在你可以買到一塊單核單執行緒的CPU,用了...

為什麼php多執行緒沒人用

ZealReal 程序資源很昂貴,所以不會輕易使用多程序。至於執行緒,php支援的不好,php5後有個協程,php開發人員基本不會去使用,協程相當於使用使用者空間的執行緒 一般執行緒是系統空間 Swoole在非同步及協程方面做的不錯,開始會越來越多人使用,大大提高php的併發能力。 import 潘...

為什麼電腦都64核128執行緒了,多執行緒軟體還這麼難寫?

Mimosa 當今世界,軟體技術的發展嚴重落後硬體的發展。在多執行緒程式設計方面一直沒有多大進展,指令碼程式語言基本上不能簡單實現真正意義的多執行緒執行。GIL永遠是Python的乙個痛點。曾經有人試圖實現乙個無GIL的Python,結果執行效率更差。長期以來,我們一直致力於這方面的工作,並且取得突...