【发布时间】:2020-07-03 13:51:16
【问题描述】:
我正在尝试确定可以从使用 Java 8 中引入的 parallelStream API 中受益的一类 Java 应用程序。
我知道其他 SO 帖子中描述的 API 的许多警告:
- 共享分叉/加入池,具有重要的开始时间,以及池中争用的一些潜在问题
- 以一种在服务器(已经有多任务策略)上使用这种代码的方式不受控制地使用系统资源实际上可能是个坏主意
- ...还有其他主要与性能有关的批评
不过,如果 Stream API 已经使用,API 提供了使用现代多核机器的代码,这些代码不是很侵入性,因此无需麻烦的多线程,开发成本低。因此,我仍然认为它在某些情况下会很有用。
我认为应用程序上下文必须是这样的:
- 我的申请目前是连续的
- 存在响应时间问题,例如挂钟时间。用户单击了 GUI 按钮并等待回复
- 应用程序在客户端计算机上运行,大多数时候我们可以期望有一些可用的 CPU 内核,而不是在已经争用资源的服务器上
- 我的开发团队没有人力/技能来开发自己的任务分配/线程机制,所以除非他们可以使用此 API 轻松完成,否则他们不会追求并行性
我在 github 上搜索,但很难找到非练习或教科书示例的并行流使用相关示例(我欢迎链接到 API 的中型+项目中的一些用法)。
那么 Java 语言开发人员使用此 API 的目标是哪些类型的应用程序?
您是否同意上述关于 API 有用的应用程序上下文的要求?
【问题讨论】:
-
您是否阅读过 Effective Java 第 3 版第 48 条“使流并行时要小心”?这提出了一些建议。
-
谢谢,这当然是相关的,但它谈到了哪些数据结构和算法可以加速。我更想找到与 API 相关的应用程序上下文。我有点假设代码中会有一些迭代,因为响应时间(第 2 项)是相关的,如何引入并行 API(选择 ArrayList...)的问题并不是我要问的.
-
@jaco0646 谢谢,是的,这个链接更接近我正在寻找的答案。您可以考虑将其格式化为答案,因为除非出现其他答案,否则我会给它赏金。
标签: java multithreading parallel-processing java-stream