线程池中的C#并行线程
本文关键字:线程 并行 | 更新日期: 2023-09-27 18:26:09
I介绍了以下将线程分配到多核处理器以执行任务的方法,然而,在Windows任务管理器中,它显示仅使用一个特定的核心。如何使这5个线程平行?
private void ActivateProcess
{
...
ThreadPool.QueueUserWorkItem(new WaitCallback(Worker1));
ThreadPool.QueueUserWorkItem(new WaitCallback(Worker2));
ThreadPool.QueueUserWorkItem(new WaitCallback(Worker3));
ThreadPool.QueueUserWorkItem(new WaitCallback(Worker4));
ThreadPool.QueueUserWorkItem(new WaitCallback(Worker5));
}
...
private void Worker1(Object stateInfo)
{
try
{
//for (int i = 0; i < _NumberOfLoop; i++)
Parallel.For(0,(long)_NumberOfLoop, i =>
{
if (_ForceToStop)
throw new System.ArgumentException(
"Force stop at WorkerThread 1", "Aborted");
// Process: Process a tasks
...
});
}
catch (Exception ex)
{
...
}
}
从这段代码中很难说。你甚至有两层并行性,所以"它应该起作用"。
答案必须在// Process: Process a tasks
中——它可能挂在一个公共的、非共享的资源上。
如果"任务"中的代码是独立的并且占用CPU,那么您应该会看到所有核心都很忙。但是,例如,当你试图用Sleep()模拟它时,你不会在TaskManager中看到任何事情发生。