Fork / Join和Map / Reduce之间的主要区别是什么? 它们在分解和分布(数据还是计算)方面有所不同?
我遇到了一个奇怪的情况,在静态初始化器中使用带有lambda的并行stream看似永远没有CPU利用率。 代码如下: class Deadlock { static { IntStream.range(0, 10000).parallel().map(i -> i).count(); System.out.println("done"); } public static void main(final String[] args) {} } 这似乎是这种行为的最小再现testing案例。 如果我: 把该块放在主要的方法而不是一个静态初始化器, 删除并行,或 删除lambda, 代码即刻完成。 任何人都可以解释此行为? 这是一个错误还是这是打算? 我正在使用OpenJDK版本1.8.0_66内部。
node.js的事件驱动编程模型使协调程序stream程变得有些棘手。 简单的顺序执行变成了嵌套的callback,这很容易(尽pipe有点复杂的写下来)。 但是并行执行呢? 假设你有三个可以并行运行的任务A,B,C,当他们完成时,你想把结果发送给任务D. 用叉/join模式,这将是 叉子 叉B 叉C joinA,B,C,运行D 如何在node.js中写入? 有没有最佳做法或食谱? 我是否每次都必须手动推出解决scheme ,还是有一些图书馆有帮手?
我刚读完这篇文章: Java-5 ThreadPoolExecutor比Java-7 ForkJoinPool有什么优势? 觉得答案不够直白。 你能用简单的语言和例子来解释一下,Java 7的Fork-Join框架和旧的解决scheme之间的权衡是什么? 我还读了关于Java技巧的Java #1的命中:什么时候使用来自javaworld.com的 ForkJoinPool vs ExecutorService ,但文章没有回答标题问题时 ,它主要谈论API差异…
使用新的fork / join框架的好处是,只需简单地将大任务分解为N个子任务,然后将它们发送到caching线程池(从Executors )并等待每个任务完成? 我看不出如何使用fork / join抽象来简化问题,或者使得解决scheme从我们多年以来的效率中获得更高的效率。 例如, 教程示例中的并行模糊algorithm可以像这样实现: public class Blur implements Runnable { private int[] mSource; private int mStart; private int mLength; private int[] mDestination; private int mBlurWidth = 15; // Processing window size, should be odd. public ForkBlur(int[] src, int start, int length, int[] dst) { mSource = src; mStart = start; […]