java - Java 中的 parallelStream 在哪些应用领域有用?

标签 java multithreading parallel-processing java-stream

我试图确定一类可以从使用 Java 8 中引入的 parallelStream API 中受益的 Java 应用程序。
我知道其他 SO 帖子中描述的 API 的许多警告:

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

  • 尽管如此,如果 Stream API 已经被使用,API 可以利用现代多核机器的代码不是很具有侵入性,因此没有麻烦的多线程开发成本低。因此,我仍然认为它在某些情况下很有用。
    我认为应用程序上下文因此必须是这样的:
  • 我的申请目前是连续的
  • 就挂钟时间而言,存在响应时间问题,例如用户点击了一个 GUI 按钮,正在等待回复
  • 应用程序运行在客户端机器上,大多数时候我们可以期望有一些可用的 CPU 内核,而不是在资源已经争用的服务器上
  • 我的开发团队没有人力/技能来开发他们自己的任务分配/线程机制,所以他们不会去追求并行性,除非他们可以使用这个 API 轻松做到

  • 我在github上搜索过,但很难找到不是练习或教科书示例的parallelStream用法的相关示例(我欢迎链接到API的中型+项目中的一些用法)。
    那么,Java 语言开发人员使用此 API 的目标是哪种应用程序?
    您是否同意上述对 API 有用的应用程序上下文的要求?

    最佳答案

    这看起来像是对地点和原因的案例的一个很好的解释。 https://computing.llnl.gov/tutorials/parallel_comp/#WhyUse
    我个人认为在以用户为中心的 Web 应用程序中没有有趣的案例。
    fork/join 框架是一个非常酷的低级 API。许多其他更高级别的框架在幕后非常成功地使用它。我用它来生成测试数据。缓存引导。数据处理等...
    在许多情况下,您会在其他情况下获得非常好的性能提升,这只是不必要的开销。

    关于java - Java 中的 parallelStream 在哪些应用领域有用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62716832/

    相关文章:

    asp.net - 如何集成 ASP.NET 线程模型和 ZeroMQ 套接字?

    swift - 使用 GCD 并行处理数组

    java - 提取tar文件时如何检测文件权限?

    java - 如何使用正则表达式提取java方法参数

    Java:可以优化多大的字符串以在序列化对象中占用更少的内存?

    c++ - 并行构建 OpenGL 模型?

    parallel-processing - MPI_Gather并行编程中的问题

    Java 内存使用量持续增长直到出现 OutOfMemory 异常

    Java多线程意外结果

    java - 如何多线程更新由sql代码更新的数据库?