18
ParallelEnumerable
에는 정적 멤버 AsParallel
이 있습니다. IEnumerable<T>
이 있고 Parallel.ForEach
을 사용하고 싶다면 항상 내가 AsParallel
을 사용해야 함을 의미합니까?Parallel.ForEach에는 AsParallel()이 필요합니까?
둘 다 맞습니까? AsParallel
없이
:
List<string> list = new List<string>();
Parallel.ForEach<string>(GetFileList().Where(file => reader.Match(file)), f => list.Add(f));
또는 AsParallel
와
List<string> list = new List<string>();
Parallel.ForEach<string>(GetFileList().Where(file => reader.Match(file)).AsParallel(), f => list.Add(f));
흠은 ... 정확히 열거를 parrallelizing되어가? 또는 적어도 병렬 처리가 작업 위임과 어떻게 분리 될 수 있습니까? – dkackman
@dkackman'.AsParallel()'은 병렬 실행에 대한 수치를 제공합니다. 특히이 경우'.SelectMany()'의 병렬 버전을 사용합니다. 엄청난'Where' 절이 있지만 순서는없는 열거 형을 생각해 볼 때, 가능한 한 많은 코어에서 where 절을 동시에 사용하여 다음 사용 가능한 스레드에 대한 열거를 제공하여 거의 'n'배 빠릅니다. 그 결과로 우리가 한 일은 나중에 동일한 방식으로 처리 될 수 있습니다. 하나의 스레드에서 동 기적으로 또는 코어를 통해 사용 가능한만큼 확산 될 수 있습니다. 즉, Parallel.ForEach 또는'.ForAll' 부분이 의미가 있습니까? –
그건 의미가 있습니다. 고마워, 닉. – dkackman