问题标签 [fork-join]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
java - Java 7 ForkJoin 在必须分叉时冻结
背景:我正在模拟逃生恐慌,人们如何逃离房间、建筑物走廊等。对于大量人口,由于每个人都需要计算彼此之间的“社会力量”(即 2000 人),因此需要进行大量计算= 2000^2 次计算)
代码:我尝试实现一个分叉连接机制来拆分这个计算。“人”是“行人”类的数组列表。我的模拟中的每个人都是此类的一个实例。这是我实现 frok/join 的函数:
对于每个人 (people.get(i)),我调用 timeStepBridge 函数,该函数循环遍历所有其他人,读取他们的位置并计算距离和对他们的力。
问题:当人数小于阈值(这里是300)时,程序运行没有问题。但是,当人数超过阈值时,程序会抛出 java.lang.StackOverflowError。我增加了堆栈大小,然后程序只是冻结并且没有响应。
我已经玩了几天,但无法到达任何地方。如果有人有想法,我将不胜感激
java - 卡在递归 Fork/Join 上
我有一个返回一组点的方法,我确信这个方法的 for 循环部分可以拆分为一个 RecursiveTask,它为每个线程返回一组点。
我已经尝试了很多次,但都失败了。那里有Java天才吗?
我现有的方法:
更新#1:
这是我尝试将其拆分为递归任务的尝试,它似乎在范围为 1(应该等于 27 点)-1、0、+1、= 3 点、3 立方 = 27 的情况下工作正常。任何更高的数字范围失败,例如范围为 2 应返回 125 点。-2、-1、0、+1、+2 = 5 分,5 立方 = 125。
主.java:
ForkPoints.java:
system-verilog - SystemVerilog fork/join w/“run()”类型函数和 SystemC
我正在尝试将内存控制器的 SystemVerilog 模型移植到 SystemC,并且想知道run()
用 fork 生成并加入 SystemC 的转换类型函数(即使用执行连续处理的永久循环)的最佳方法是什么。这些run()
函数通常在模拟开始时生成。我的困惑是 SystemC 确实支持生成线程、fork 和 join,但我相信该语言的目的是SC_THREAD
提供这种功能。有没有人有足够的两种语言经验来发表评论?
注意:我认为这个问题更多地与惯例有关,而不是技术上正确或错误的解决方案。可能它可以通过不止一种方式完成。
java - Java ForkJoin 多线程比单线程慢
我正在尝试 Java ForkJoin 框架并编写了一个简单的测试程序,将图像的像素设置为随机颜色。例如,它会产生伪噪声。
但是在测试性能时,我发现运行单线程实际上比使用多线程运行更快。我通过一个高阈值让它运行单线程。
这是阶级工人阶级:
生成 6000 * 6000 图像时,结果为:
单线程:9.4 秒 @ 25% CPU 负载
多线程:16.5 秒 @ 80%-90% CPU 负载
(Core2quad Q9450)
为什么多线程版本比较慢?
我该如何解决?
java - 我如何证明在 Java Fork/Join 框架中发生了工作窃取?
我想改进我的 fork/join 小示例,以表明在 Java Fork/Join 框架执行期间会发生工作窃取。
我需要对以下代码进行哪些更改?示例的目的:只需对多个线程之间的值分解工作进行线性研究。
java - fork-join,compute() 方法在一段时间后崩溃
我编写了一个小程序,它打开一个 UDP 套接字并接收一些 UDP 数据包。我尝试的是每个数据包都由自己的线程使用 fork-join 处理(更改字节顺序),然后通过 udp 将更改的数据包转发到另一个系统。
这是代码:
该程序编译并运行良好,但大约 5 分钟后它停止并显示以下错误消息:
CwStreamSwitcher.java:126 是这个方法调用:protected void compute() {
什么会导致这种情况?
system-verilog - 系统 Verilog fork 混淆,fork 和 begin 之间执行的语句
在此处查看简化的示例代码:
我的困惑是对的调用arr_obj1s[j].run()
永远不会返回(它们永远循环运行),而且我不太理解该调用在开始/结束块之外放置的含义。哪个进程是永远执行的,如果某个进程正在运行一个不会返回的进程run()
,那么每次调用怎么会返回?await()
run()
编辑:这里有更多信息。发布完整的代码将是页面和页面,但我希望这额外的一点帮助。
obj1 的run()
函数如下所示:
作为一个例子,run_a
看起来基本上是这样的(它们都是相似的):
但是obj2的run()
函数看起来基本上是这样的:
例如,run_d()
如下所示:
java - Java ForkJoinPool 的并行度是多少?
当我遇到这个构造函数时,我正在研究关于 Fork/Join 框架的 oracle 文档ForkJoinPool
:ForkJoinPool(int parallelism)
. 文档说这是并行度级别,默认情况下等于可用处理器的数量。谁能告诉我如何使用它来提高程序的速度和效率?
java - 线程“主”java.lang.OutOfMemoryError 中的异常:Eclipse 上的 Java 堆空间
我正在尝试使用 fork 和 join 框架来执行这个程序。当我将较小尺寸的 JPEG 图像提供给该程序时,它可以正常工作,但是当我提供大小超过 4 MB 的图像时,它会抛出以下异常:
我正在使用日食 Helios IDE。
我希望它适用于大小超过 50 MB 的较大图像
java - 在 Java 的非分叉连接执行器服务中是否有等效的 isQuiescent?
我在 ForkJoin 和 FixedSizeThreadPool 中实现了我的问题的两个实现,我想比较它们的性能。在我的问题中,每个任务都会创建一些子任务,并将它们再次提交给执行器服务。在 fork-join 实现中,我使用 fork(),而在另一个实现中,我使用 execute()。
显然,我的主线程需要等到整个工作完成。在 fork-join 中,我可以优雅地检查 isQuiescent() 属性以确保一切都已完成,但在另一种情况下,我想不出比手动计算我创建了多少任务以及完成了多少任务更好的方法!该解决方案有效,但以共享变量为代价,这显然会降低我的性能。
我不能只使用shutdown(),因为这样子任务就不会被安排(它们会得到RejectedExecutionException)。
有人知道比计算任务更好的解决方案吗?