文档章节

要出去找工作了, 复习下任务之并行循环

开源中国123456789
 开源中国123456789
发布于 2017/05/10 16:27
字数 1058
阅读 9
收藏 0

**Parallel **提供对并行循环和区域的支持。 我记得公司有一个项目需要每个月都需要出账, 里面的数据是通过for循环插入数据库的, 里面的操作相当的多,让人很蛋疼, 后来我接手了, 我是试着将代码改成并行循环, 效率居然提高4倍以上, 当然机器好效率会更快的, 因为并行是根据你的cpu核数运行的嘛

 var result = Parallel.For(0, 10, (i, parallelLoopState) =>
 { 
         Console.WriteLine(i);
 });

执行 for(在 Visual Basic 中为 For)循环,其中可能会并行运行迭代,而且可以监视和操作循环的状态。 上面的方法默认是根据机器本身分配并行度, 当然咱们也可以自己指定并行度,

 var parallelOptions = new ParallelOptions
                {
                    MaxDegreeOfParallelism = 2 //设置cpu最大并行数为2
                };
                var result = Parallel.For(0, 10, parallelOptions, (i, parallelLoopState) =>
                {
                    Console.WriteLine(i);
                });

并行循环的中断和跳出 在传统的for中有continue,break来进行流程上的控制, 当然并行for里也是一样的 ,不过我认为是有点点区别的, 在并行循环流程里面要实现跳出本次循环开始下次循环不是用continue, 而是用return;

 var result = Parallel.For(0, 10, parallelOptions, (i, parallelLoopState) =>
                {
                    if (i==3)
                    {
                        return; //跳出本次i==3的循环
                    }
                    Console.WriteLine(i);
                });

输入图片说明

在并行循环流程里面终止循环并不是break就够了, MSDN解释如下: ParallelLoopState.Stop() : 告知 Parallel 循环应在系统方便的时候尽早停止执行。 ParallelLoopState.Break() : 告知 Parallel 循环应在系统方便的时候尽早停止执行当前迭代之外的迭代。

Break 指示应运行在当前迭代后的没有迭代次数。 它有效地取消循环的任何其他迭代。 但是,它不会停止已经开始执行的任何迭代。 例如,如果 Break 从循环从 0 到 1000,所有迭代小于 100 应仍继续运行,但从 101 到的迭代数为 1000,尚未启动不执行并行循环的第 100 次迭代中调用。 对于可能已执行的长时间运行迭代 Break 设置 LowestBreakIteration 属性设置为当前迭代的索引,如果当前索引的当前值少于 LowestBreakIteration。 若要停止其索引大于从竞争执行的最低中断迭代的迭代,您应执行以下操作︰ 检查是否 ShouldExitCurrentIteration 属性是 true。 退出迭代,如果其索引大于 LowestBreakIteration 属性值。 说明如示例所示。 Break 通常会使用在其中进行的排序将是数据源中存在的基于搜索的算法。

调用 Stop 方法指示不需要运行尚未启动的任何迭代循环。 它有效地取消循环的任何其他迭代。 但是,它不会停止已经开始执行的任何迭代。 调用 Stop 方法使 IsStopped 属性以返回 true 为仍在执行循环的任何迭代。 此选项尤其有用,对于长时间运行迭代,可以检查 IsStopped 属性并退出早期如果其值为 true。 Stop 通常使用其中一个结果后找到、 没有其他迭代需要执行的搜索算法中。

 var parallelOptions = new ParallelOptions
            {
                MaxDegreeOfParallelism = 2
            };
            var result = Parallel.For(0, 10, parallelOptions,
                (i, parallelLoopState) =>
                {
                    if (i == 3)
                    {
                        parallelLoopState.Break(); 
                    }
                    Console.WriteLine(i);
                });
            Console.Read();

就拿此代码而言, 即使i==3已经执行了parallelLoopState.Break(); i==3的循环依然会执行完, 因为已经启动的并行是不可能让停止的 输入图片说明

有关更多介绍还是看msdn吧, 不过我觉得有的时候都是机器翻译 https://msdn.microsoft.com/zh-cn/library/system.threading.tasks.parallel(v=vs.110).aspx

© 著作权归作者所有

开源中国123456789
粉丝 7
博文 77
码字总数 66184
作品 0
海淀
私信 提问
【java.util.concurrent】CountDownLatch解析

一、概念 被用来同步一个或多个线程任务,强制他们等待直到由其他线程完成正在执行的一组操作。 可以向CountDownLatch对象设置一个计数值,可以通过在该对象上调用countDown()方法来减小该计...

阿阿阿阿阿局
2016/08/09
14
0
做项目servlet和框架选哪个?

现在大四了,准备找工作了,想找java方面的。这学期还有个课程设计 我打算用java做一个我们学校的就业信息系统。现在发愁的是用不用框架,还是单纯的用servlet+jdbc,以前自己写东西,包括给...

luger
2012/09/06
1K
4
一道数组面试题-不能使用辅助空间找重复次数的数

今天小弟去面试一个java后台职位。期间遇到了笔试题了。老实说,都很久没有做过笔试题了,之前找工作都是朋友推荐,过去聊聊技术的。今天遇到面试题,我就知道了会回答的不好的了。毕竟做面试...

浪子一号
2013/10/17
2.6K
14
数据与任务的并行---Parallel类

  Parallel类是对线程的抽象,提供数据与任务的并行性。类定义了静态方法For和ForEach,使用多个任务来完成多个作业。Parallel.For和Parallel.ForEach方法在每次迭代的时候调用相同的代码,...

Pilgrim
2018/07/23
0
0
Java 复习 —— 多线程基础

1、基本概念 1)进程:运行当中的程序,程序是静止的概念,进程的是动态的概念,进程与进程之间互不运影响 2)线程:指程序中单独顺序的流控制,线程依附于进程中,他是最小的执行单位!一个...

learn_more
2015/09/04
124
0

没有更多内容

加载失败,请刷新页面

加载更多

C# 视频多人脸识别的实现过程

整个项目是用虹软技术完成开发 上一篇内容的调整,提交到git了,https://github.com/catzhou2002/ArcFaceDemo 基本思路如下: 一、识别线程 1.获取当前图片 2.识别当前图片的人脸位置,并将结...

是哇兴哥棒棒哒
1分钟前
0
0
Spring Cloud Eureka 你还在让它裸奔吗??

前些天栈长在微信公众号Java技术栈分享了 Spring Cloud Eureka 最新版 实现注册中心的实战教程:Spring Cloud Eureka 注册中心集群搭建,Greenwich 最新版!,成功进入 Eureka 控制台页面。 ...

Java技术栈
18分钟前
1
0
linux gyp ERR! stack Error: EACCES: permission denied, mkdir ‘xxx’

在使用linux npm install的出现这个错误了,百度了下,没有权限加个参数即可 npm install --unsafe-perm

朝如青丝暮成雪
18分钟前
0
0
使用kubeadm 搭建K8s集群

1. 参考官网 https://kubernetes.io/docs/setup/independent/install-kubeadm/

whhbb
46分钟前
2
0
Dubbo 3.0 !提升不止一点点!

Dubbo 自 2011 年 10 月 27 日开源后,已被许多非阿里系的公司使用,其中既有当当网、网易考拉等互联网公司,也不乏中国人寿、青岛海尔等大型传统企业。 自去年 12 月开始,Dubbo 3.0 便已正...

编程SHA
47分钟前
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部