当前位置: 首页 > 知识库问答 >
问题:

关于Fork-Join框架的细节

孙才捷
2023-03-14

在Doug Lea的论文“A Java Fork/Join Framework”中:

http://gee.cs.oswego.edu/dl/papers/fj.pdf

在2.1偷工中,他说:

当工作线程遇到连接操作时,它会处理其他任务(如果可用),直到注意到目标任务已完成(通过isDone)。否则,所有任务都将在不阻塞的情况下运行到完成。

那么有人能具体告诉我这些“其他任务”来自哪里吗?它们来自其他工作线程的任务队列吗?这是否意味着每当工作线程遇到连接调用时,它都会继续“从其他线程窃取任务”,而不是“跳到自己队列中的其他任务”?

共有1个答案

山寒
2023-03-14

当存在未决任务时,“其他任务”可能来自其自身的队列、其他线程的队列,或者来自新请求的提交队列。

连接()是一个相当困难的过程。它涉及任务控制,也就是说,当任务处于活动处理状态并暂停等待时,能够控制它们。在应用程序中这样做通常不起作用。(操作系统做得很好,Cilk、JCilk通过使用编译器/运行时来做到这一点。)Doug Lea在连接时使用“延续线程”来阻塞工作线程。

 类似资料:
  • fork-join框架允许在几个worker上中断某个任务,然后等待结果将它们组合起来。 它在很大程度上利用了多处理器机器的容量。 以下是fork-join框架中使用的核心概念和对象。 Fork Fork是一个过程,在这个过程中,任务将自身分成较小且独立的子任务,这些子任务可以同时执行。 语法 (Syntax) Sum left = new Sum(array, low, mid); left.

  • 本文向大家介绍Java Fork/Join框架,包括了Java Fork/Join框架的使用技巧和注意事项,需要的朋友参考一下 Fork/Join框架是ExecutorService接口的一个实现,通过它我们可以实现多进程。Fork/Join可以用来将一个大任务递归的拆分为多个小任务,目标是充分利用所有的资源尽可能增强应用的性能。 和任何ExecutorService接口的实现一样,Fork/Jo

  • 主要内容:Fork,Join,ForkJoinPool,RecursiveAction,递归任务,实例框架允许在几个工作进程中断某个任务,然后等待结果组合它们。 它在很大程度上利用了多处理器机器的生产能力。 以下是框架中使用的核心概念和对象。 Fork Fork是一个进程,其中任务将其分成可以并发执行的较小且独立的子任务。 语法 这里是的子类,方法将任务分解为子任务。 Join 连接()是子任务完成执行后任务加入子任务的所有结果的过程,否则它会持续等待。 语法 这里剩下的是类的一个对象。 For

  • 问题内容: 我正在寻找有关如何使用即将到来的jsr166y(叉形联接,栅栏)和extras166y(ParallelArray等)的井井有条的信息源-从教程到专家级。 问题答案: IBM Developerworks网站上有一个很好的系列文章,但是我发现的最有用的资料是Brian Goetz的演示文稿,非常值得您花一个小时的时间。他花了前25分钟的时间谈论背景,然后介绍了新框架的一些很好的例子。

  • 在上面,我认为fork-join执行器的代码并行是不可能的。对不同方法/函数的每次调用都需要上一步的内容。如果我要为线程选择fork-join执行器,这对我有什么好处呢?在fork-join和线程池执行器之间,上面的代码执行会有什么不同。 谢谢

  • 问题内容: 使用新的fork / join框架 有什么好处,而不是仅在开始时将大任务简单地拆分为N个子任务,然后将它们发送到缓存的线程池(来自Executors),然后等待每个任务完成?我看不到使用fork / join抽象如何简化问题或使解决方案比我们多年以来的效率更高。 例如,本教程示例中的并行化模糊算法可以这样实现: 首先拆分,然后将任务发送到线程池: 任务进入线程池的队列,当工作线程可用时