提问者:小点点

来自Java的parallelStream在什么应用领域有用?


我试图找出一类Java应用程序,它们可以从使用Java 8中引入的parallelStream API中获益。

我知道在其他SO文章中描述的API的许多注意事项:

  • 共享fork/join池,具有非常重要的启动时间,以及池中争用的一些潜在问题
  • 不受控制地使用系统资源,使得在服务器(已经具有多任务策略)上使用此类代码实际上可能是个坏主意
  • .。。 还有其他主要与性能有关的批评

不过,API提供了利用现代多核机器的方法,只要已经使用了流API,代码就不会很有侵扰性,因此在低开发成本下没有麻烦的多线程。 因此,我仍然认为它在某些情况下是有用的。

我认为应用程序上下文应该是这样的:

  1. 我的应用程序当前是顺序的
  2. 存在响应时间问题,就挂钟时间而言,例如,用户单击了GUI按钮,正在等待答复
  3. 应用程序运行在客户端计算机上,在大多数情况下,我们可以期望有一些可用的CPU内核,而不是在资源已经被竞争的服务器上
  4. 我的开发团队没有人力/技能来开发他们自己的任务分配/线程机制,所以他们不会追求并行,除非他们能够轻松地使用这个API来实现。

我在github上搜索了一下,但是很难找到parallelStream使用的相关示例,这些示例不是练习或教科书中的示例(我欢迎链接到该API的Midsize+项目中的一些用法)。

那么,Java语言开发人员针对的是哪种应用程序呢?

您是否同意上述对应用程序上下文的要求以使API有用?


共1个答案

匿名用户

这看起来像是一个很好的解释案例在哪里和为什么。 https://computing.llnl.gov/tutorials/parallel comp/#为什么我个人在以用户为中心的web应用程序中没有发现有趣的情况。

fork/join框架是一个非常酷的低级API。 许多其他更高级的框架都非常成功地使用了它。 我用它来生成测试数据。 缓存引导。 数据处理等。。 在许多情况下,您在其他方面的性能得到了很好的提升,这只是不必要的开销。