并行化Java程序

并行化Java程序,java,multithreading,parallel-processing,acceleration,Java,Multithreading,Parallel Processing,Acceleration,如何在Java上并行化程序,使并行版本的执行时间(远)小于没有线程的程序的执行时间? 例如,我尝试了执行器服务(),但它的工作时间要长3倍左右 问题是我在Java中使用线程不正确,还是用2个内核在2次内获得加速是不真实的(用4个内核可以吗?) 另外,我需要并行化,而循环多线程编程在以下情况下很有用: 密集内存操作时需要多核系统(如果有如下长I/O操作,则不需要) 数据库操作(执行查询) 网络操作(如发送文件或调用web服务) 文件操作(读写文件) 如果您没有遇到上述情况之一,则由于进程之间切

如何在Java上并行化程序,使并行版本的执行时间(远)小于没有线程的程序的执行时间? 例如,我尝试了
执行器服务
(),但它的工作时间要长3倍左右

问题是我在Java中使用线程不正确,还是用2个内核在2次内获得加速是不真实的(用4个内核可以吗?)


另外,我需要并行化
,而
循环

多线程编程在以下情况下很有用:

  • 密集内存操作时需要多核系统(如果有如下长I/O操作,则不需要)
  • 数据库操作(执行查询)
  • 网络操作(如发送文件或调用web服务)
  • 文件操作(读写文件)

如果您没有遇到上述情况之一,则由于进程之间切换的开销,添加多线程会导致应用程序速度变慢。

我向您推荐此线程,因为它非常详细地介绍了这个主题:[


从长到短,并行性会给任何进程带来开销和复杂性,虽然并行化肯定会带来好处,但在2个内核上运行2个线程的速度不会快2倍。

这充其量只是误导:在文件操作上使用多线程很可能会慢一些计算密集型任务应该在您的列表中。在文件操作(如读写文件)中使用多线程并不较慢。通常,当cpu未100%使用时,多线程总是有用的。这通常发生在任何非内存操作中。在单核系统(一个cpu)中,对密集型任务使用多线程没有用。我编辑我的帖子是为了更清晰。Re.文件读写,假设我们讨论的是本地硬盘,瓶颈是硬盘驱动器-向它扔更多线程只会使它变慢…参见示例:这取决于许多因素。你可以在内存中读取文件和后续操作,并将结果保存到远程db.您可以通过多线程高效地执行此操作。从文件读取是一个缓慢的操作,因此,如果您在内存中要执行较长的操作,您可以使用从文件中读取数据所需的时间来详细说明以前已读取的数据。如果不查看您的代码,则无法回答此问题-此问题可能是由于多种原因造成的。。。