work-stealing

    10热度

    1回答

    下面是否正确? 的disruptor pattern具有更好的并行性能和可扩展性,如果每个条目有多种方式来处理(IO操作或注释),因为可以使用多个消费者不争进行并行化。 相反,work stealing(即本地存储条目和窃取从其他线程的条目)具有更好的并行性能和可扩展性,如果每个条目具有唯一的一个单一的方式进行处理,因为在破碎器中的条目disjointly分布到多个线程模式导致争用。 (而且是破坏

    0热度

    1回答

    下面的代码旨在展示一个简单的递归叉连接的使用(find max),我知道Java JIT可以在一个简单的单线程循环中更快地实现这一点,但它仅仅用于演示。 我最初使用ForkJoin框架实现了find max,该框架适用于大型双打数组(1024 * 1024)。 我觉得我应该可以使用ForkJoin框架,只使用Executor.workStealingPool()和Callables/Futures

    1热度

    1回答

    在我的程序中,我对每个在内核lauch中发布的块都有一个工作变量。每个块停留在一个循环中,在其deque中进行处理,处理它并将动态生成的工作推回。一组deque标志被维护,指示哪些deques是活动的,即有工作。如果一个deque是空的,内核会进入另一个循环,试图从另一个块的双端队列中窃取工作。当没有更多的deques被激活时,达到停止条件。 在测试中,我设置了所有以1个工作项开始的deques。

    6热度

    3回答

    在我的项目中,我构建了一个Java执行框架,它接收来自客户端的工作请求。工作(不同规模)被分解为一组任务,然后排队等待处理。有单独的队列来处理每种类型的任务,每个队列都与一个ThreadPool相关联。 ThreadPools的配置方式使得引擎的整体性能最佳。 这种设计可以帮助我们有效地平衡请求,而大型请求不会占用系统资源。然而,有时当某些队列为空并且它们各自的线程池闲置时,解决方案变得无效。 为

    0热度

    1回答

    我正在阅读描述Cilk窃取调度性能的文件。 1)我的理解是,调度程序不知道关键路径的任务,只是试图通过窃取任务图中不“深”的任务来维持其执行。那是对的吗? 2)另外,Cilk工作窃取调度程序是否假设所有任务具有相似的复杂性?如果任务的复杂性不统一,是不是调度程序在实现最佳性能方面不够灵活,即最佳的负载平衡?

    2热度

    3回答

    为什么我们需要偷工减料? (例如在Cilk)主人在顶端工作,小偷从底部偷窃。为什么它有用? 我们可能会有多个盗贼从底部偷窃。那么,我们不需要锁吗? 我读过一些地方,大型作业(例如在树中创建)被添加到底部。所以,从底部偷窃更有效率(减少沟通,因为窃贼通过窃取他们变得更加忙碌)。是吗?

    2热度

    1回答

    我想改进我的fork/join小示例,以显示在Java Fork/Join框架执行期间发生偷工作。 我需要对代码进行哪些更改?示例的目的:仅对线程进行线性研究,以了解在多个线程之间分解工作的值。 package com.stackoverflow.questions; import java.util.LinkedList; import java.util.List; import ja

    1热度

    1回答

    我是cilk ++的新手,我想使用cilk的工作窃取调度器。我无法找到关于此的很多信息。有谁能帮我解决这个问题吗?谢谢。

    1热度

    1回答

    我目前正在为C++使用绿色线程使用工作窃取来实现多个硬件线程上的调度器之间的负载平衡。 我已将主环境固定到其硬件线程,这意味着它不会被盗,因此迁移到其他硬件线程。 我相信我已经读过这个地方,如果主要上下文在哪里被盗,并返回(退出)在不同的硬件线程中从它的起源地是未定义的行为。但是,我现在似乎无法找到任何消息来源。 这是不确定的行为?引用来源将是完美的。

    21热度

    1回答

    我想通过一个方法提交Runnable任务到ForkJoinPool: forkJoinPool.submit(Runnable task) 请注意,我用的JDK 7 引擎盖下,他们转变成ForkJoinTask对象。 我知道ForkJoinPool是有效的,当一个任务被递归分割成小的时候。 问: 是否工作窃取仍处于ForkJoinPool工作,如果没有递归? 在这种情况下值得吗? 更新1: 任