2013-08-05 14 views
5

C#タスクは1つのコアで実行されますか?C#タスクは1つのコアで実行されますか?

作成するタスクの数を決定する必要があるプロジェクトがあります。 私はコンピュータが取ることができるほど多くを作成する必要があります。 プロセッサ、コア、または論理プロセッサの数は、私は の3つのオプションの間で混乱しています。

+0

私が理解しているように、管理スレッドは必ずしも独自のネイティブスレッドで実行されるわけではありません。だからあなたの質問に対する答えは「どちらも」とは思えません。 – ken

+1

タスクは、コアが動くスレッドのように非常によく機能します(私は信じています)。あなたの質問に答えるには、どのリソースがCPU/IO /メモリ/ディスクを最大限に活用しているのか、あなたのタスクが何をしているのかによって異なります。 – TheKingDave

+0

タスクは、あるコアから別のコアにホップすることができます。本当に尋ねるべきことは、「複数のコアでタスクを実行していますか?」です。 No. –

答えて

3

タスクはスレッドで実行されます。 OSはスレッドをコアにスケジューリングします。コアは論理概念であり、物理CPUチップとは異なります。

Environment.ProcessorCountタスクを作成するか、PLINQやParallelなどの上位TPL構造のいずれかを使用することをお勧めします。

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つのメソッドを呼び出し、最初の実行では1秒の遅延が必要です。

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

より具体的にお聞かせください。はい、私は実際にその文書を読んでいます。 – user2381422

+0

基本的に彼がここで保存しているのは、TPLの作業を定義し、フレームワークにいくつのスレッドを作成させるかなどです。各スレッドが何をすべきかを定義するだけです。 – TheKingDave

+0

@ user2381422 - はい、TheKingDaveによると、使い方はとても簡単です。実行する作業を定義し、タスクにラップし、.NET FWがcpuやその他のリソースに基づいてその作業ブロックをどのように実行するのが最適かを決定します。 –

関連する問題