6

我是多线程的新手。我的计算机上有 4 个逻辑进程,我想在 4 个不同内核上的线程中运行 4 个相同的任务。我该怎么做?我尝试使用BackgroundWorker但 4 个 BackgroundWorker 实例仅填充 2 个可用的 4 个内核。我的带有 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. 您应该使用线程或任务。

您可能会感兴趣的另一篇文章是:Multi core programming using Task Parallel Library with .NET 4.0

于 2013-11-10T14:52:42.503 回答
0

原因可能就在你的呼唤logical processes中。例如,如果您有hyperthreading on,使用额外的逻辑(但不是物理)核心可能没有任何优势

于 2013-11-10T16:01:36.343 回答