c# 并行运算
2021-06-06 11:05
标签:hex ack private 处理 padding stack round 顺序 列排序 使用System.Collections.Concurrent命名空间下的类型来用于并行循环体内:
类
说明
BlockingCollection
为实现 IProducerConsumerCollection
ConcurrentBag
表示对象的线程安全的无序集合。
ConcurrentDictionary
表示可由多个线程同时访问的键值对的线程安全集合。
ConcurrentQueue
表示线程安全的先进先出 (FIFO) 集合。
ConcurrentStack
表示线程安全的后进先出 (LIFO) 集合。
OrderablePartitioner
表示将一个可排序数据源拆分成多个分区的特定方式。
Partitioner
提供针对数组、列表和可枚举项的常见分区策略。
Partitioner
表示将一个数据源拆分成多个分区的特定方式。
PLinq(Linq的并行计算)
上面介绍完了For和ForEach的并行计算盛宴,微软也没忘记在Linq中加入并行计算。下面介绍Linq中的并行计算。
4.0中在System.Linq命名空间下加入了下面几个新的类:
类 | 说明 |
ParallelEnumerable | 提供一组用于查询实现 ParallelQuery{TSource} 的对象的方法。这是 Enumerable 的并行等效项。 |
ParallelQuery | 表示并行序列。 |
ParallelQuery |
表示并行序列。 |
在ParallelEnumerable中提供的并行化的方法
ParallelEnumerable 运算符 | 说明 |
AsParallel() | PLINQ 的入口点。指定如果可能,应并行化查询的其余部分。 |
AsSequential() | 指定查询的其余部分应像非并行 LINQ 查询一样按顺序运行。 |
AsOrdered() | 指定 PLINQ 应保留查询的其余部分的源序列排序,直到例如通过使用 orderby 子句更改排序为止。 |
AsUnordered() | 指定查询的其余部分的 PLINQ 不需要保留源序列的排序。 |
WithCancellation() | 指定 PLINQ 应定期监视请求取消时提供的取消标记和取消执行的状态。 |
WithDegreeOfParallelism() | 指定 PLINQ 应当用来并行化查询的处理器的最大数目。 |
WithMergeOptions() | 提供有关 PLINQ 应当如何(如果可能)将并行结果合并回到使用线程上的一个序列的提示。 |
WithExecutionMode() | 指定 PLINQ 应当如何并行化查询(即使默认行为是按顺序运行查询)。 |
ForAll() | 多线程枚举方法,与循环访问查询结果不同,它允许在不首先合并回到使用者线程的情况下并行处理结果。 |
Aggregate() 重载 | 对于 PLINQ 唯一的重载,它启用对线程本地分区的中间聚合以及一个用于合并所有分区结果的最终聚合函数。 |
- ///
- /// PLinq简介
- ///
- private void Demo11()
- {
- var source = Enumerable.Range(1, 10000);
- //查询结果按source中的顺序排序
- var evenNums = from num in source.AsParallel().AsOrdered()
- where num % 2 == 0
- select num;
- //ForAll的使用
- ConcurrentBagint> concurrentBag = new ConcurrentBagint>();
- var query = from num in source.AsParallel()
- where num % 10 == 0
- select num;
- query.ForAll((e) => concurrentBag.Add(e * e));
- }
c# 并行运算
标签:hex ack private 处理 padding stack round 顺序 列排序
原文地址:https://www.cnblogs.com/mrray/p/10782779.html