为什么OS进程看起来比java中的线程更快

我开发了一个多线程
java应用程序,它使用线程来处理一批工作.我有一个主线程,将工作分配给不同的线程.一切正常.

现在我已经更改了应用程序,允许它在多个java进程中运行,每个进程都像以前一样进行多线程处理.例如,我使用8个线程来处理一个java进程中的8个作业,现在我可以有2个Java进程,每个进程仍然有4个线程来处理8个作业.

应用程序的建模如下:调度程序将获取需要完成的工作,然后将它们分派给线程池.线程之间没有同步或通信.

我注意到后来的方法有很大的性能提升,我想知道为什么.任何人都可以对此有所了解吗? OS进程调度是否比java线程更有效?当我真的需要这种性能提升时,我应该将此作为一般经验吗?谢谢.

最佳答案 这真的取决于很多因素.首先,你看看两种情况下的CPU和内存负载水平?我希望在两个进程的情况下,系统负载更大,因此工作更快.

另一个原因可能是你只有两个不同的内存堆,由两个单独的垃圾收集器清理.

这些进程如何相互通信(文件,管道,队列,套接字等)?在多个进程的情况下,您无法共享内存(除非您调用一些需要付费的OS系统调用).在测量时间时,您是否考虑了这个通信时间?

点赞