我已经确定使用并行流确实比我的数据集的串行流更快。话虽如此,我对这个问题所讨论的ForkJoinPool感到疑惑:Custom thread pool in Java 8 parallel stream。
鉴于,
void foo()
{
barCollection.parallelStream() … do something with the stream
}
是1& 2以下相当于哪个池将被使用?
1)
ForkJoinPool.commonPool().submit(()->foo()).get();
2)
foo();
如果答案是肯定的,那么为什么ForkJoinPol.commonPool()
方法存在?
答案 0 :(得分:17)
并行流执行将使用公共池,但流库只是该池的一个可能的客户端。
至于为什么存在>> sess = tensorflow.InteractiveSession()
>> x = tensorflow.Variable([[1,2,3],[4,5,6],[7,8,9]])
>> x.initializer.run()
>> z = tensorflow.pack([x[i,i] for i in range(3)])
>> z.eval()
array([1, 5, 9], dtype=int32)
方法,你的假设 - 由于流而存在公共池 - 是不正确的。公共池存在(并且很容易到达)以防止公共场所发生的不可避免的悲剧"并行操作的每个启动器都创建自己的池,导致单个JVM上的池线程太多,从而降低了效率。对于公共游泳池,阻力最小的路径 - 只需使用公共游泳池 - 通常也是最佳选择。
并行流是并行操作的一个这样的启动器,并且使用公共池,但不是特殊的。