1

작업 병렬 라이브러리를 사용할 때 프로세서 당 하나의 작업 만 실행하고 있습니까? 그리고 그렇지 않다면 C#에서이 작업을 수행하는 가장 좋은 방법은 무엇입니까?C#의 작업 병렬 라이브러리를 사용하여 프로세서 당 하나의 병렬 작업 실행

참고 : 성능 향상을 위해이 작업을 수행하지는 않지만 각 작업의 타이밍을보다 안정적으로 유지하려고합니다. 자세한 내용은이 질문을 참조하십시오. Timing of parallel actions using the Task Parallel Library in C#

답변

1

최대 병렬 처리를 지정하려면 ParallelOptions을 사용할 수 있습니다. 그러나 이것은 상한선이며, 코어 당 하나의 쓰레드를 강제하지 않을 것이고, 다른 제약은 더 적은 코어가 사용된다는 것을 의미 할 수도 있습니다.

var list = new List<int>(); 
var options = new ParallelOptions(); 
options.MaxDegreeOfParallelism = 4; 

Parallel.ForEach(list, options); 
5

처음에는 절대적으로 안정적인 타이밍을 원할 경우 Windows 및 .Net을 사용하는 것이 올바른 선택이 아닙니다. Windows는 real-time OS이 아니기 때문에 시스템에서 발생하는 다른 일을 기반으로 코드에 대해 다른 타이밍을 선택할 수 있습니다. .Net은 가비지 수집기 덕분에 결정적이지 않은 타이밍을 가지기 때문에 좋은 선택이 아닙니다.

그러나 타이밍을 다소 안정적으로 만들고 싶다면 할 수있는 일이 있습니다.

각 스레드를 자체 프로세서에서 실행하려면 Thread을 수동으로 만들고 각 스레드에 대해 ProcessThread.ProcessorAffinity을 설정하고 getting the ProcessThread for a Thread is not that simple을 설정할 수 있습니다.

현재 모든 작업이 즉시 시작되도록하려면 (ThreadPool에서 현재 실행중인 다른 작업과 상관없이) 직접 Thread을 만들어야합니다.

그러나

당신이 원하는 모든 단지 Environment.ProcessorCountMaxDegreeOfParallelism을 설정, 프로세서 당 가장 하나 개의 작업에 이 있는지 확인하는 것입니다 경우.

관련 문제