使用java多线程的Intei7与i5
我正在开发一个基于web的应用程序 我编写代码的计算机有4核英特尔i5 4440处理器 我部署应用程序的计算机具有8核英特尔i7 4790K4.00 GHz处理器 需要计算的任务之一非常繁重,因此我决定使用java executor框架 我有这个:使用java多线程的Intei7与i5,java,multithreading,executorservice,Java,Multithreading,Executorservice,我正在开发一个基于web的应用程序 我编写代码的计算机有4核英特尔i5 4440处理器 我部署应用程序的计算机具有8核英特尔i7 4790K4.00 GHz处理器 需要计算的任务之一非常繁重,因此我决定使用java executor框架 我有这个: ExecutorService executorService = Executors.newFixedThreadPool(8); 然后我一次添加30个任务 在我的开发机器上,结果是用3秒(当我只使用一个线程时,结果是20秒),而在服务器机器上,
ExecutorService executorService = Executors.newFixedThreadPool(8);
然后我一次添加30个任务
在我的开发机器上,结果是用3秒(当我只使用一个线程时,结果是20秒),而在服务器机器上,结果是用16秒(这与代码只使用一个线程时的结果相同)
正如你可以猜到的,我很困惑,不知道为什么在服务器上它的计算速度要慢得多
谁知道为什么更快的处理器不能从多线程算法中获益 没有更多的证据,很难猜测根本原因。你能吗
- 在服务器计算机上运行应用程序的配置文件
- 使用连接到服务器计算机,并查看线程信息
最后一点注意-服务器是否使用与开发相同的体系结构(32/64位)、操作系统和主要/次要Java版本?是否可能在开发机器中执行旧的.class文件(单线程)?另外,您是否尝试多次执行只是为了检查CPU是否忙于其他事情?没有,我没有上载旧的.class文件。我试了很多次死刑。我很困惑线程是否访问任何共享数据结构?如果是这样的话,可能会有更多的争论。不,他们不会访问任何共享数据。你能透露一些关于正在进行的操作类型的信息吗?如果任务是CPU绑定的,那么可能没有什么解释,因此我怀疑您尝试执行的任务可能是IO绑定的。是否要获取team viewer访问权限?