并行编程随记

.Net Framework 里引入了并行编程,并行编程本质上还是多线程,只是微软对此进行了封装和优化,使用多线程编程变得更简单,如下面一个例子:

for(var i = 0; i < 100000; i++)
{
    Console.WriteLine(string.Format("Work Item :", i));
}

如果把 100000 个工作项使用多个线程同时处理, 在以前还有点麻烦,现在就变得非常简单:

Parallel.For(0, 100000, (i) => {
    Console.WriteLine(string.Format("Work Item :", i));
});

上面的代码中, 程序会根据任务项数自动分区(分区大概的意思就是分成几个线程来同时处理)。

 

我们可以设置 ParallelOptions 对象,来设置最多分几个区, 如:

ParallelOptions options = new ParallelOptions();
options.MaxDegreeOfParallelism = 10; // 最多分十个区

Parallel.For(0, 100000, options, (i) => {
    Console.WriteLine(string.Format("Work Item :", i));
});

还可以通过 System.Collections.Concurrent.Partitioner 类来进行更细的分区设置, 如:

var parts = Partitioner.Create(0, 100000, 1000); // 1000 是指每个分区的元素数, 此行代码将指示创建 100 个分区
Parallel.For(parts, (i) => {
    Console.WriteLine(string.Format("Work Item :", i));
});

上面这些分区,叫做静态分区,就是分好区之后,每个区要处理的元素就已经全部确定好,但是有这种情况,如有些分区的任务很快就处理完了,有些分区的任务处理得
比较慢, 那么快的分区处理完分区的任务后没有办法帮助其他慢的分区处理任务,在这种情况下,又可以使用动态分区,具体实现方法可以参考微软官网的例子:https://msdn.microsoft.com/zh-cn/library/dd997416(v=vs.110).aspx

 

还有一个 System.Collections.Concurrent.OrderablePartitioner 类,用来对可排序的数据源进行分区。

 

相关参考:

Parallel Processing and Concurrency in the .NET Framework

5天玩转C#并行和多线程编程 —— 第一天 认识Parallel

转载于:https://www.cnblogs.com/kuku/p/7356274.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值