9

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

作成するタスクの数を決定する必要があるプロジェクトがあります。コンピューターが処理できる数だけ作成する必要があります。それはプロセッサ、コア、または論理プロセッサの数ですか?3 つの選択肢の間で混乱しています。

4

2 に答える 2

4

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

タスクを作成Environment.ProcessorCountするか、PLINQ や などの上位レベルの TPL コンストラクトを使用することをお勧めしParallelます。

于 2013-08-05T13:46:54.883 に答える
0

タスク ライブラリ (PTL) を使用する場合は、このことを気にする必要はありません。詳細については、こちらをご覧ください。手短に:

TPL は、使用可能なすべてのプロセッサを最も効率的に使用するために、同時実行の程度を動的にスケーリングします。さらに、TPL は作業の分割を処理します...

次のように Task のラッパーを作成しました。

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)
于 2013-08-05T13:39:14.873 に答える