집 >백엔드 개발 >C#.Net 튜토리얼 >.NET 병렬 처리 및 멀티스레딩 학습의 기본 사항에 대한 자세한 소개
1. 예비 병렬 처리:
public static void test() { for (int i = 0; i < 10000; i++) { Console.WriteLine(i); } } public static void test1() { for (int i = 0; i < 10000; i++) { Console.WriteLine(i + "aaaaaaaaaaaaaaa"); } }
호출:
static void Main(string[] args) { Stopwatch sw = new Stopwatch(); sw.Start(); //串行执行: test(); test1(); //并行执行: 17Parallel.Invoke(test, test1); 19sw.Stop(); 21Console.WriteLine("共耗费时间:"); 23Console.WriteLine(sw.ElapsedMilliseconds / 1000+"s"); }
2. 파티션 병렬 처리:
Parallel.ForEach(Partitioner.Create(1,20,5),(x,s)=>{ //并行代码中自定义串行,第三个参数表示item1到item2之间的范围 Console.WriteLine(x); for (int i = x.Item1; i < x.Item2; i++) { if (i == 10) break; Console.WriteLine(i); } s.Break();// 非常类似普通for循环中的break if (s.ShouldExitCurrentIteration) return; });
3.
int[] arry = new int[10001]; for (int i = 0; i < 10000; i++) { arry[i] = i; } try { Parallel.ForEach(arry, (x, s) => { Console.WriteLine(x); if (sw.Elapsed.Seconds > 3) { throw new TimeoutException("操作超时"); } }); } catch (AggregateException ex) { foreach (var item in ex.InnerExceptions) { Console.WriteLine(item); } }
4. 병렬 스케줄 지정:
ParallelOptions options = new ParallelOptions(); options.MaxDegreeOfParallelism = 1;//如果设置为1就类似于串行代码按顺序执行 options.MaxDegreeOfParallelism =Environment.ProcessorCount;//获取计算机上面的处理器数量 Parallel.For(1,10,options,(x) => { Console.WriteLine(x); });
위 내용은 .NET 병렬 처리 및 멀티스레딩 학습의 기본 사항에 대한 자세한 소개의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!