다음과 같은 방법으로 작업 실행을 위해 멀티 코어 프로세서에 스레드를 배포하지만 Windows 작업 관리자에서는 하나의 특정 코어 만 사용하는 것으로 나타났습니다. 이 5 개의 스레드에 대해 병렬로 만드는 방법은 무엇입니까?ThreadPool의 C# 병렬 스레딩
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)
{
...
}
}
여기에 http://stackoverflow.com/questions/1718465/optimal-number-of-threads-per-core라고 가정하면 대답을 찾을 수 있습니다. –
첫 번째 간단한 점검 - 작업 관리자에서 번호를 볼 수있는 스레드 수는 어느 정도입니까? 코어에 스레드를 배포하는 것은 응용 프로그램이 아니라 OS의 일부입니다. – weismat
왜 스레드 풀에서 이미 실행중인 코드에서'Parallel.For'를 사용하고 있습니까? – Tudor