发布于 2014-12-26 17:42:40
注意事项与多线程的其他用法类似。
发布于 2014-12-26 18:45:30
streams API使并行性看起来很简单。如前所述,使用并行流是否会加速您的应用程序,需要在实际的运行时上下文中进行彻底的分析和测试。我自己使用并行流的经验表明了以下几点(我确信这个列表还远远不完整):
就我的五分钱……
发布于 2014-12-27 23:31:04
本文的重点(实际上有17篇)是要指出,F/J框架更像是一个研究项目,而不是一个通用的商业应用程序开发框架。
批评对象,而不是人。当框架的主要问题是架构师是教授/科学家而不是工程师/商业开发人员时,尝试做到这一点是最困难的。可从本文下载的PDF合并更多地讨论了使用研究标准而不是工程标准的问题。
并行流可以很好地工作,直到您尝试扩展它们。框架使用pull技术;请求进入提交队列,线程必须将请求从提交队列中拉出。任务返回到派生线程的双队列中,其他线程必须将任务从双队列中拉出。这种技术不能很好地扩展。在推送技术中,每个任务分散到系统中的每个线程。这在大规模环境中效果要好得多。
正如甲骨文的Paul Sandoz指出的那样,扩展还有许多其他问题:例如,如果您有32个内核,并且正在执行Stream.of(s1,s2,s3,s4).flatMap(x -> x).reduce(...)那么你最多只能使用4个内核。这篇文章指出,对于可下载的软件,伸缩不能很好地工作,必须使用局部技术来避免堆栈溢出和OOME。
使用并行流。但要注意其中的局限性。
https://stackoverflow.com/questions/27655327
复制相似问题