深圳Java培训
达内深圳宝安中心

136-3244-2201

热门课程

【深圳Java培训】处理器发展的产物-Fork Join

  • 时间:2016-11-21
  • 发布:深圳Java培训
  • 来源:达内新闻

相信大家还记得上一篇文章深圳java培训(sz.java.tedu.cn)专家说的是处理器发展和需求背景吧,那么这一章就接着说一下在这种背景下的产物Fork Join吧。

<a style='color:blue' href='http://sz.java.tedu.cn/'>深圳Java培训</a>机构

Fork Join 的设计

看过《Introduction to Algorithms》(《算法导论》)的朋友们应该还记得,在讲到归并排序(Merge Sort)和快速排序的时候,有一种很简单又很有效率的思路就是“分而治之”,即“分治法”。而Fork Join的思路也是同理,只不过划分之后的任务更适合分派给不同的计算资源,可以并行的完成任务。

深圳Java培训机构

当计算分别完成之后,最后再合并回来。简单来看,就是一个递归的分解和合并,直到任务小到可以接受的程度。

Fork Join 要点

Fork Join设计出来就是为了提高任务完成的效率,围绕这个目标,有一些要点是设计中需要考虑的,下面就给出一些要点。

线程的管理和线程的单纯性。基于如上的设计思路,我们可以看到子任务之间的相关性是相对比较简单的,可以并行处理。为了提高效率,并不需要重量级的线程结构和对应的线程维护,线程实现简单就好,满足需求即可,降低维护成本。

队列机制,硬件支持一定是比较有限的,那么分解的任务应该用队列维护起来,一个好的队列设计是很有必要的。

“工作窃取”,也就是设计论文原文中提到的 Work Stealing 。对于负载比较轻的线程,可以帮助负载较重的执行线程分担任务。

使用Fork Join的注意事项:

可用线程数和硬件支持。线程这东西,也是有开销的东西,绝对不是越多越好,尤其在硬件基础有限的情况下。

任务分解的粒度。和前者有关系,就是分解的任务,“小”到什么程度是可以接受的,不可再分。

Fork Join数据结构支持

按照如上设计,分解执行一个大的任务,Fork Join至少需要考虑如下一些数据结构。

轻量级的线程结构。

维护线程的线程池,负责线程的创建,数量维护和任务管理。

维护任务,并支持Work Stealing的双端队列,如下图:

深圳Java培训机构

对于子任务的分解,可以从后端取出分解再放入,而对于WorkStealing则可以从头部取出,放入其他队列的尾部。

好了,今天关于Fork Join的话题就说到这里,如果想学习的同学可以参加深圳达内JAVA培训,免费试听,或周末免费参加深圳JAVA培训公 开课程试听,这里有强大的师资阵容,“师者,所以传道授业解惑也”,讲师,是教育的主体,是影响整体办学质量、学员学习质量的重要因素。所以深圳达内 JAVA培训竭尽全力为学员提供最强大的师资力量,让学员接受最好的教育,学习最前沿的技术。掌握一门牛逼闪闪技术,待遇自然不在话下。

上一篇:本科生求职难参加达内Java培训,获11K高薪入职上海睿民
下一篇:达内教育集团总裁韩少云:回归本质, 打铁还需自身硬

深圳Java培训班:Java常量是什么_深圳达内龙岗校区

深圳Java培训机构:Java如何实现单例模式_深圳达内龙岗校区

深圳Java培训机构:Java中static关键字的作用详解_深圳达内龙岗校区

深圳Java培训机构:Java常见异常类型总结及示例_深圳达内龙岗校区

选择城市和中心
贵州省

广西省

海南省

台湾