簡體   English   中英

多線程和多進程的性能差異

[英]Performance difference for multi-thread and multi-process

幾年前,在Windows環境中,我做了一些測試,通過讓多個CPU計算實例密集+內存訪問密集型+ I / O訪問密集型應用程序運行。 我開發了兩個版本:一個在多處理下運行,另一個在多線程下運行。

我發現多處理的性能要好得多。 我在其他地方讀過(但我不記得該網站)。

這說明原因是在多線程下,他們正在為單個內存管道和I / O管道“戰斗”,這使得與多處理相比性能更差

但是,我再也找不到那篇文章了。 我想知道,直到今天,下面是否仍然如此?

在Windows中,如果算法代碼在多處理下運行,則性能很可能優於多線程。

這取決於各種線程或進程(我將使用它們的共同術語“任務”)需要進行多少通信,特別是通過共享內存:這對於線程來說既簡單又便宜,但根本不需要過程,所以,如果很多事情發生,我打賭過程的表現不會超過線程。

此外,進程(特別是在Windows上)開始時“更重”,因此如果發生大量“任務啟動”,則線程可以輕松地在性能方面擊敗進程。

接下來,您可以擁有“超線程”的CPU,它可以非常快速地(至少)在核心上運行兩個線程 - 但是,不是進程(因為“超線程”線程不能使用不同的地址空間) - 另一種情況其中線程可以在性能方面獲勝。

如果這些考慮都不適用,那么無論如何,比賽應該不比平局好。

我不確定這句話甚至意味着什么。 這非常接近廢話。

進程內線程共享的主要內容是虛擬內存地址空間。

我發現這也是事實。 但我認為它與調度有關。 因為如果你運行它足夠長,多進程就像多線程一樣快。 這個數字大約是10秒。 如果算法需要運行10秒鍾。 多進程和多線程一樣快。 但如果只需要運行不到1秒鍾。 多進程比多線程快得多。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM