如何在不同的核心上拆分长任务?

时间:2013-11-10 14:47:27

标签: c# multithreading

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

2 个答案:

答案 0 :(得分:3)

如果使用任务,则可以为任务设置处理器关联。请查看以下帖子:Force Task<T> to different core ?

我认为你不能用BackgroundWorker做到这一点。您应该使用线程或任务。

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

答案 1 :(得分:0)

原因可能在于您致电logical processes。例如,如果你有hyperthreading on,使用额外的逻辑(但不是phycical)核心可能没有任何优势