我开发了一个多线程java应用程序,它使用线程来处理一批工作。我有一个主线程,将工作分配给不同的线程。一切正常。
现在我已经更改了应用程序,允许它在多个java进程中运行,每个进程都像以前一样进行多线程处理。例如,我使用8个线程来处理一个java进程中的8个作业,现在我可以有2个Java进程,每个进程有4个线程,总共可以处理8个作业。
应用程序的建模方式如下:调度程序将获取需要完成的工作,然后将它们分派给线程池。线程之间没有同步或通信。
我注意到后来的方法有很大的性能提升,我想知道为什么。任何人都可以对此有所了解吗? OS进程调度是否比java线程更有效?当我真的需要这种性能提升时,我应该将此作为一般经验吗?感谢。
答案 0 :(得分:2)
这实际上取决于很多因素。首先,你看看两种情况下的CPU和内存负载水平?我希望在两个进程的情况下,系统负载更大,因此工作更快。
另一个原因可能是你只有两个不同的内存堆,它们由两个独立的垃圾收集器清理。
这些进程如何相互通信(文件,管道,队列,套接字等)?在多个进程的情况下,您无法共享内存(除非您调用一些需要付费的OS系统调用)。在测量时间时,您是否考虑过这段时间?