我将以下方法分配给多核处理器以执行任务,但是,在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)
{
...
}
}
答案 0 :(得分:1)
很难说这段代码。你甚至有两层并行,所以“它应该工作”。
答案必须在// Process: Process a tasks
- 它可能挂在一个共同的非共享资源上。
如果“任务”中的代码是独立且CPU密集的,您应该看到所有核心都忙碌。但是当你试图用Sleep()模拟它时,你不会在TaskManager中看到任何事情。