并发与并行

并发

当有多个线程在操作时,如果系统只有一个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();

 

posted @ 2020-12-06 15:15  温故纳新  阅读(88)  评论(0编辑  收藏  举报