6

私はマルチスレッドの初心者です。私のコンピューターには 4 つの論理プロセスがあり、4 つの異なるコアのスレッドで 4 つの等しいタスクを実行したいと考えています。どうすればできますか?使用しようとしましBackgroundWorkerたが、BackgroundWorker の 4 つのインスタンスが、利用可能な 4 つのコアのうち 2 つしか占有しません。BackgroundWorker のコード サンプル:

        BackgroundWorker worker = new BackgroundWorker();
        worker.DoWork += new DoWorkEventHandler(worker_DoWork);
        worker.RunWorkerAsync(calculationParams);
        BackgroundWorker worker1 = new BackgroundWorker();
        worker1.DoWork += new DoWorkEventHandler(worker_DoWork);
        worker1.RunWorkerAsync(calculationParams1);

        BackgroundWorker worker2 = new BackgroundWorker();
        worker2.DoWork += new DoWorkEventHandler(worker_DoWork);
        worker2.RunWorkerAsync(calculationParams2);

        BackgroundWorker worker3 = new BackgroundWorker();
        worker3.DoWork += new DoWorkEventHandler(worker_DoWork);
        worker3.RunWorkerAsync(calculationParams3);
4

2 に答える 2

3

タスクを使用する場合は、タスクのプロセッサ アフィニティを設定できます。次の投稿を確認してください: Force Task<T> to different core ? .

でこれを行うことはできないと思いますBackgroundWorker。スレッドまたはタスクのいずれかを使用する必要があります。

興味深いと思われる別の投稿は、.NET 4.0 で Task Parallel Library を使用したマルチコア プログラミングです。

于 2013-11-10T14:52:42.503 に答える
0

理由はあなたの電話にあるかもしれませんlogical processes。たとえば、 がある場合hyperthreading on、追加の論理 (ただし物理ではない) コアを使用しても利点がない場合があります。

于 2013-11-10T16:01:36.343 に答える