2013-08-05 38 views
5

C#任務是否在一個內核上運行?C#任務是否在一個內核上運行?

我有一個項目,我需要決定創建多少個任務。 我需要創建儘可能多的計算機。 是處理器,內核還是邏輯處理器的數量,我在這三個選項之間混淆了 。

+0

據我所知,託管線程甚至不一定在自己的本地線程上運行。所以我認爲你的問題的答案是「不」。 – ken

+1

一個任務的工作原理非常像它運行的核心線程(我相信)。要回答你的問題,這取決於你的任務在做什麼,他們使用大部分的CPU/IO /內存/磁盤資源......? – TheKingDave

+0

任務可以從一個核心跳到另一個核心。你真正應該問的是「一個任務運行在多個核心上嗎?」。號碼 –

回答

3

任務在線程上執行。 OS將線程調度到核心。內核是一個邏輯概念,與物理CPU芯片不同。

創建Environment.ProcessorCount任務,或者最好使用更高級別的第三方物流結構,如PLINQ或Parallel之一。

0

如果使用任務庫(PTL),則不需要擔心這一點。你可以閱讀更多關於它here。簡而言之:

TPL動態調整併發度以最有效地使用所有可用的處理器。此外,TPL處理工作劃分...

我們已經創建了周圍任務的包裝如下:

public static class PeriodicTaskFactory 
{ 
    public static Task Start(Action action, int intervalInMilliseconds = -1, int delayInMilliseconds = 0, int duration = -1, int maxIterations = -1, bool synchronous = false, CancellationToken cancelToken = null, TaskCreationOptions periodicTaskCreationOptions = TaskCreationOptions.None); 
} 

然後我們把它像這樣。在這種情況下,我們想要執行的唯一工作是每1分鐘調用一次方法,第一次執行時延遲1秒。

 PeriodicTaskFactory.Start(() => 
     { 
      CdClMappingLogic.Invoke(); 
     }, 60000, 1000, -1, -1, true) 
+0

你能更具體嗎?是的,我正在閱讀該文件。 – user2381422

+0

基本上他在這裏保存的是你在TPL中定義了工作並讓框架計算出有多少個線程......等來創建。你只需定義每個線程要做什麼。 – TheKingDave

+0

@ user2381422 - 是的,正如TheKingDave所說,它使用起來非常簡單。您可以定義要執行的工作,將其包裝在一個任務中,並且.NET FW根據cpu和其他資源決定如何最好地執行該工作塊。 –

相關問題