Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/337.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用java多线程的Intei7与i5_Java_Multithreading_Executorservice - Fatal编程技术网

使用java多线程的Intei7与i5

使用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秒),而在服务器机器上,

我正在开发一个基于web的应用程序

我编写代码的计算机有4核英特尔i5 4440处理器

我部署应用程序的计算机具有8核英特尔i7 4790K4.00 GHz处理器

需要计算的任务之一非常繁重,因此我决定使用java executor框架

我有这个:

ExecutorService executorService = Executors.newFixedThreadPool(8);
然后我一次添加30个任务

在我的开发机器上,结果是用3秒(当我只使用一个线程时,结果是20秒),而在服务器机器上,结果是用16秒(这与代码只使用一个线程时的结果相同)

正如你可以猜到的,我很困惑,不知道为什么在服务器上它的计算速度要慢得多


谁知道为什么更快的处理器不能从多线程算法中获益

没有更多的证据,很难猜测根本原因。你能吗

  • 在服务器计算机上运行应用程序的配置文件
  • 使用连接到服务器计算机,并查看线程信息
我的猜测是服务器机器负载很重(可能来自其他应用程序或后台线程?)。也许您的服务器用户/java应用程序只允许使用core

我首先使用top(在linux上)或taskmanager(在windows上)来确定在运行应用程序时服务器是否处于负载状态。评测/JMX监控会增加开销,但您将能够了解实际使用了多少线程


最后一点注意-服务器是否使用与开发相同的体系结构(32/64位)、操作系统和主要/次要Java版本?

是否可能在开发机器中执行旧的.class文件(单线程)?另外,您是否尝试多次执行只是为了检查CPU是否忙于其他事情?没有,我没有上载旧的.class文件。我试了很多次死刑。我很困惑线程是否访问任何共享数据结构?如果是这样的话,可能会有更多的争论。不,他们不会访问任何共享数据。你能透露一些关于正在进行的操作类型的信息吗?如果任务是CPU绑定的,那么可能没有什么解释,因此我怀疑您尝试执行的任务可能是IO绑定的。是否要获取team viewer访问权限?