我开发了一个多线程的java应用程序,它使用线程来处理一批工作。我有一个主线程,它将工作调度到不同的线程。一切工作正常。
现在,我更改了应用程序,允许它在多个java进程中运行,每个进程都像以前一样执行多线程处理。例如,我过去在一个java进程中有8个线程来处理8个作业,现在我可以有2个Java进程,每个Java进程还有4个线程来处理总共8个作业。
应用程序的模型是这样的:分派器将获取需要完成的工作,然后将它们分派到线程池。线程之间没有同步或通信。
我注意到在后一种方法中有相当大的性能提升,我想知道为什么。有人能对此发表一些见解吗?OS进程调度是否比java线程更高效?当我真的需要性能提升时,我是否应该将此作为一般的经验法则?谢谢。
发布于 2013-06-17 02:15:20
这真的取决于很多因素。首先,您看过这两种情况下的CPU和内存负载水平了吗?我预计在这两个进程的情况下,系统的负载会更大,因此工作速度会更快。
另一个原因可能是您只有两个不同的内存堆,这两个内存堆由两个单独的垃圾收集器清理。
另外,进程之间是如何通信的(文件、管道、队列、套接字等)?在多进程的情况下,您不能共享内存(除非您调用某些OS系统调用,这是有代价的)。在测量时间时,您是否考虑到了这一通信时间?
https://stackoverflow.com/questions/17135492
复制相似问题