我是多线程的新手。我的计算机上有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);
答案 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)核心可能没有任何优势