Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在不同的核心上分割长任务?_C#_Multithreading - Fatal编程技术网

C# 如何在不同的核心上分割长任务?

C# 如何在不同的核心上分割长任务?,c#,multithreading,C#,Multithreading,我是多线程的新手。我的计算机上有4个逻辑进程,我想在4个不同内核上的线程中运行4个相同的任务。我怎么做? 我尝试使用BackgroundWorker,但是BackgroundWorker的4个实例只填充了4个可用的核心中的2个。 我的BackgroundWorker代码示例: BackgroundWorker worker = new BackgroundWorker(); worker.DoWork += new DoWorkEventHandler(worke

我是多线程的新手。我的计算机上有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);

如果使用任务,则可以为任务设置处理器相关性。请查看以下帖子:

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


另一篇你可能会感兴趣的帖子是:。

原因可能在于你调用了
逻辑过程。例如,如果在
上有
超线程,那么使用额外的逻辑(而不是物理)内核可能没有任何优势

为什么在不同的内核上运行函数很重要?@JensKloster有一个很好的观点。让.NET为您管理线程的最佳分布。Igor回答中的一个链接指出:
TPL动态地扩展并发度,以有效地使用所有可用的核心。通过使用TPL,您可以最大限度地提高代码的性能,同时专注于程序设计要完成的工作。
@Jens Kloster,我需要计算长任务,现在我发现我的处理器有50%是空闲的。我想减少计算时间如果您使用的是.NET 4.5,那么您应该只使用TPL,而不是自己管理线程。事实证明.NET在这方面做得相当好,所以你不必这么做。我的计算机上有“超线程”,现在我在所有4个内核上都运行任务执行,但