我讀過,當您在單獨的線程(並行)中運行長時間運行的操作時,當您的PC具有多個處理器內核時,性能將有顯着改善。在C#中有一個函數Parallel.ForEach
,我的理解是,它在每個處理器核心上運行的獨立線程中拆分長時間運行的操作。儘管如果只有一個內核,該函數將作爲簡單的Foreach
循環(同步)運行。另外,如果您創建的線程多於處理器內核,則可能會產生負面影響。通過將長時間運行的任務分解爲單獨的進程來提高程序性能
我正在考慮創建一個單獨的控制檯應用程序,將args
傳遞給它並在多個進程(如start -WindowStyle Hidden SeparateProcess.exe
)上運行它的.exe。
編輯:
我已經創造了這樣的
class Program
{
static void Main(string[] args)
{
for (int i = 0; i < 100; i++)
{
Thread.Sleep(200);
Console.WriteLine("" + i);
}
Console.WriteLine();
Console.WriteLine(Guid.NewGuid() + ": Process finalized.");
}
}
一個控制檯應用程序,然後,使用PowerShell執行了很多次:
For ($i=0; $i -lt 10; $i++){
start -WindowStyle Normal SeparateProcess.exe
}
這是否會提高程序的性能在單跑核心?
注:長時間運行的任務是Emgu CV圖像計算算法。
多線程不僅僅是爲了利用多個內核。根據應用程序及其線程的作用,運行在單個內核計算機上的多線程應用程序可能仍然比運行在單個內核上的單線程應用程序更具性能。 多進程的一大缺點是它們不能共享內存或資源,而多線程的單進程可以。 – RavB
您的進程不受CPU限制 - 大部分時間只是休眠。什麼會提高性能?它仍然會睡200毫秒100次,並且幾乎同時進行。寫入將全部採用相同的時間。 –
@RavB *有很多原因可以在只有單核的機器上使用多線程(畢竟,線程已經被普遍使用了幾十年,而多核心的計算機只在一個十年內普遍使用)但這些原因不是表現。在單核心機器上,多線程代碼總是會少*性能(因爲你完成了相同的工作,但是具有線程開銷),但是儘管存在線程開銷,它仍然可以是有用的。 – Servy