내 경험에 비추어 볼 때 많은 수의 작업에서는 에 선형으로 MaxDegreeOfParallelism
을 바인딩하는 것이 좋습니다. 당신이 F 번호에 병렬 프로그래밍 작업을하고 있기 때문에
let options = ParallelOptions()
options.MaxDegreeOfParallelism <- Environment.ProcessorCount * 2
Parallel.For(0, n, options,
(fun i -> (* Long running task here *))) |> ignore
, 우수한 책 "Parallel Programming with Microsoft .NET", 특히 장에서 봐 주시기 바랍니다 : 여기에
는 F 번호 구문 미모의 하나가 @ 유사한 코드 조각입니다
"Parallel Loops"에 있습니다. @ 토마스는 샘플을 F #으로 번역했고 그들은
here입니다. 이것은
Environment.ProcessorCount
로 평가 기본 작업 스케줄러 및 기본 ParallelOptions으로, 지금까지 내가 말할 수있는
// initialize ranges with passed in loop arguments and expected number of workers
int numExpectedWorkers = (parallelOptions.EffectiveMaxConcurrencyLevel == -1) ?
Environment.ProcessorCount :
parallelOptions.EffectiveMaxConcurrencyLevel;
:
출처
2012-11-25 01:48:50
pad
+1, 초보다 빠릅니다. –
MaxDegreeOfParallelism은 컴퓨터의 코어 수에 따라 다릅니 까? –
@Wallhood : 작업이 CPU 바운드 인 경우 가능성이 높습니다. 작업이 IO 바인딩 (파일 처리, DB 액세스) 일 가능성이 높습니다. 일반적인 상황에서 가치가 2/4 코어에서 제대로 작동하는 경우, 더 정교한 것을 시도 할 실제 이유가 없었습니다. 예를 들어 16 코어 수퍼 머신에서 실행될 가능성이있는 프로그램이 아닙니다. – MiMo