有没有计划利用java 7 util.concurrent的ForkJoin API,或者在Akka中公开类似的API?
我有以下代码
// Parent.js
var cp = require('child_process');
var child = cp.fork('./pChild.js');
child.on('message', function(m) {
// Receive results from child process
console.log('received: ' + m);
});
// Send child process some work
child.send('First Fun');
Run Code Online (Sandbox Code Playgroud)
// pChild.js
process.on('message', function(m) {
console.log("Helloooooooooo from pChild.js")
// Pass results back to parent process
process.send("Fun1 complete");
});
Run Code Online (Sandbox Code Playgroud)
如何处理从 pChild.js 抛出的 parent 中的错误并终止进程?
for(int j=1; j <=3; ++j)
fork
automatic int k = j;
begin
.... # use k here
end
join_none
Run Code Online (Sandbox Code Playgroud)
这是如何fork在循环中创建一个。我已经试过了,它有效。但是,如果我想创建 forkjoin而不是join_none在循环中,它不会按预期工作,而是按顺序工作。
我如何修改它以使用 a 来工作join,我希望我的所有叉子同时分叉,然后等待所有叉子完成(join)或其中一个完成(join_any)?
谢谢
我想使用java的fork join模型实现bitonic排序.这是分拣机的代码
import java.util.concurrent.RecursiveAction;
public class BitonicSortTask extends RecursiveAction
{
private final int array[];
private final int low;
private final int high;
private final int dir;
public BitonicSortTask(int array[],int low,int high,int dir)
{
this.array = array;
this.low = low;
this.high = high;
this.dir= dir;
}
@Override
protected void compute()
{
if(high>1)
{
int temp = high/2;
BitonicSortTask left = new BitonicSortTask(array, low, temp,1);
BitonicSortTask right = new BitonicSortTask(array, temp+1,high,0);
invokeAll(left, right);
BitonicMerge(array, low, high, dir);
}
}
private void BitonicMerge(int[] …Run Code Online (Sandbox Code Playgroud) 我可以通过提供代码片段来解释我的问题:
public static void main(final String[] a) {
Stream.of(1, 2, 3, 4).map(i -> ForkJoinPool.commonPool().submit(new RecursiveAction() {
@Override
protected void compute() {
System.out.println(Thread.currentThread());
}
})).forEach(ForkJoinTask::join);
}
Run Code Online (Sandbox Code Playgroud)
在我的笔记本电脑上运行时,它有4个核心,这打印:
Thread[main,5,main]
Thread[ForkJoinPool.commonPool-worker-1,5,main]
Thread[main,5,main]
Thread[ForkJoinPool.commonPool-worker-1,5,main]
Run Code Online (Sandbox Code Playgroud)
为什么某些任务在主线程中运行,主线程是公共fork连接线程池之外的线程?
创建自定义fork join线程池时,不会发生这种情况:
public static void main(final String[] a) {
final ForkJoinPool p = new ForkJoinPool(4);
Stream.of(1, 2, 3, 4).map(index -> p.submit(new RecursiveAction() {
@Override
protected void compute() {
System.out.println(Thread.currentThread());
}
})).forEach(ForkJoinTask::join);
}
Thread[ForkJoinPool-1-worker-1,5,main]
Thread[ForkJoinPool-1-worker-1,5,main]
Thread[ForkJoinPool-1-worker-1,5,main]
Thread[ForkJoinPool-1-worker-1,5,main]
Run Code Online (Sandbox Code Playgroud)
那么,换句话说,公共池有什么特别之处?提供这些知识,在公共池中执行长时间运行的任务是明智的还是不明智的想法?
在 SystemVerilog 中,我需要等待在 fork join_none 结构内执行的一些线程完成。但是在另一个 fork join_none 结构中还有另一个永远不会结束的进程。
我的代码如下所示:
fork
process_that_will_never_end();
join_none
fork
for(int i = 0; i < 40; i++) begin
fork
process_that_must_end(i);
join_none
end
join
Run Code Online (Sandbox Code Playgroud)
包含 for 循环的 fork join 没有效果(这是我所期望的)。我考虑过在最后使用“等待叉”,但这也会等待 process_that_will_never_end(),所以它不起作用。
有没有办法只等待所有 process_that_must_end() 线程完成?
所以我有三个 http 请求要传递给 forkJoin:
apiRequest1 = this.http.getApi1('...');
// The same format is for the remaining api requests.
forkJoin(apiRequest1, apiRequest2, apiRequest3)
.subscribe(([results1, results2, results3]) => { rest of code }
Run Code Online (Sandbox Code Playgroud)
结果 3 中的数据不断作为空数组返回。如果我自己运行 HttpRequest 并订阅它,数据就会恢复正常。有什么办法可以解决这个问题吗?
我正在尝试使用fork和join框架执行此程序.当我向这个程序提供较小尺寸的JPEG图像时,它工作正常,但是当我给出大小超过4 MB的图像时,它会抛出异常:
****Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
at ForkBlur.blur(ForkBlur.java:120)
at ForkBlur.main(ForkBlur.java:110)****
Run Code Online (Sandbox Code Playgroud)
我正在使用eclipse Helios IDE.
我希望它适用于大小超过50 MB的大图像