为什么我们需要Java中的多进程编程?

Jin*_*ong 7 java multithreading multiprocessing

Java支持多线程,Java也支持Process,ProcessBuilder和Runtime.exec()的多进程...

我清楚地知道线程和进程的定义,以及它们在os概念中的区别.

但我想知道为什么以及在什么情况下我们需要在Java应用程序中使用多进程而不是多线程?

Tud*_*dor 8

不一定将进程视为线程的替代品.java中的进程是执行外部命令的便捷方式.它们在一般并行方案中并不是那么有用,因为它们启动和同步很麻烦.

它们的另一个好用途是隔离可能不会终止或导致堆栈溢出的本机代码(或任何其他无法控制的代码).如果要在一个线程内运行它可能会导致整个过程失败.相反,你可以产生一个新的进程然后强行杀死它而不用担心它.


Joh*_*erg 7

最重要的是,processes作为补充使用的原因threads可能是

  • 稳健性,一个失败的过程不会影响另一个
  • 分离.启动多个JVM允许运行相同的类而不必担心干扰(例如,更容易使用非线程安全库)
  • 通常能够启动外部命令(例如,非java)
  • 线程亲和力.在某些操作系统中,它可能提供更好的缓存语义,其中进程在多个CPU而不是线程上共享,尤其是在考虑线程共享工作集时.

尽管如此,在大多数应用程序threading中,由于内存原因,易于生成以及(相对)简单易用性,它是首选工具.


Juv*_*nis 1

当同步不是问题时,即不干扰相同数据的进程,但您需要同时收集这些进程的输出时,您可能需要它,这意味着您需要并行运行它们,尽管它们完全不同流程。