C Sharp并发编程并发编程

.net并发编程

一.Parallel实现并行编程

List<int> list = new List<int>();
list.Add(1);
list.Add(2);
list.Add(3);
list.Add(4);
ParallelOptions parallelOptions = new ParallelOptions() {
                MaxDegreeOfParallelism=16
 };
 Parallel.ForEach(list, parallelOptions, x => {
       //执行具体的任务逻辑
 });

Parallel.For(1, 1000, i => {
       //使用到i的一些操作
});

Parallel.Invoke(
                  () => Method1(),
                  () => Method2(),
                  () => Method3(),
                  () => Method4(),
                  () => Method5()
                  //需要并行执行的一系列方法
 );

注:Parallel支持的并行遍历重载方法还有好几中,这里就不一一列举。

1.如果不对Parallel.ForEach或者Parallel.For指定最大线程数,那么如果任务较多,TPL在初始化5个线程后,每隔100毫秒左右新增线程,直到达到最大线程数。如果新增线程的过程中有任务完成,那么就不会新增线程。

2.如果任务数过多,且不设置最大线程数的话,线程数无法控制,容易造成高CPU,系统失去响应。

推荐书:ParallelProgramming with Microsoft.NET(微软出版社)

3.在任务量不大或者每个任务耗时很短时,则需要考虑是否有必要使用Parallel并行遍历,因为Parallel维护多线程本身需要花费一部分时间,当任务量很小时可能串行速度比用Parallel并行快一些。

二、Task类实现多线程编程

Task.Run(()={

​ //dowork

})

Task t=Task.Factory.StartNew(()={

​ //dowork

})

t.Start()

1.使用Task进行并发编程需要采用WaitAll(params Task[] tasks)等所有的Task线程结束,不然可能有子线程没有结束,主线程就已经结束了。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

浪舟子

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值