并发与并行
并发
当有多个线程在操作时,如果系统只有一个CPU,则它根本不可能真正同时运行一个以上的线程,它只能把CPU运行时间划分成若干个时间段,再将时间段分配给各个线程执行,在一个时间段的线程代码运行时,其它线程处于挂起状。.这种方式我们称之为并发(Concurrent)
并行
当系统有一个以上CPU时,则线程的操作有可能非并发。当一个CPU执行一个线程时,另一个CPU可以执行另一个线程,两个线程互不抢占CPU资源,可以同时进行,这种方式我们称之为并行(Parallel)。
区别
并行是指两个或者多个事件在同一时刻发生;而并发是指两个或多个事件在同一时间间隔内发生。
C# 里的TaskScheduler实例有最大并发数属性
TaskScheduler taskScheduler = TaskScheduler.Current; // 本任务调度器的最大并发数 为 2^31-1 即 2147483647 int t =taskScheduler.MaximumConcurrencyLevel;
C# plinq里的ParallelEnumerable设置并行查询的并行度
var query22 = dic.Values.AsParallel().Where(t => t.Age > 20 && t.Age < 2533) // 设置plinq查询时的并行度为本机处理器的数目-1 .WithDegreeOfParallelism(Environment.ProcessorCount - 1) .ToList();