为什么线程池实现比普通线程慢

Nac*_*ate 5 java performance multithreading

我有一个代码块

for (i=0;i<size;i++)
{

      do job;

}
Run Code Online (Sandbox Code Playgroud)

最初这个作业任务是按顺序执行的(如上所示),但后来我用普通线程(内部可运行的类实现)制作了多线程,比如

for (i=0;i<size;i++)

{
   new threadingclass(some args) 
}

runnable threadingclass  {

  pub void run () {

      do job;

 }
} 
Run Code Online (Sandbox Code Playgroud)

这个工作正常,有一些线程限制(直到系统资源足够)所以为了避免资源重载,我用标准的theadpool实现(线程池,执行器服务和工作线程实现)实现了相同的代码

threadexecutor t=new threadexecutor(size)

for (i=0 ; i<size ; i++)

{
   t.execute(new threadingclass(some args))
}

runnable threadingclass  {

  pub void run () {

      do job;

  }
} 
Run Code Online (Sandbox Code Playgroud)

现在的情况就像,

我想循环运行25次(没有线程),我尝试了所有3个实现

  1. 顺序:大约需要7分钟
  2. 正常多线程:40秒
  3. 使用线程池进行多线程处理(大小:100):约2分钟

我有点困惑为什么正常的线程和thredpool实现时序差异太大,内部也是线程池不涉及太复杂的逻辑.任何帮助表示赞赏.

提前致谢

Tim*_*m B 0

您的处理器很可能只有 4 或 8 个核心。之后的每个线程实际上都会减慢系统速度,因为它必须不断中断正在运行的线程,以便给下一个线程一些时间。

运行具有 4 个线程的线程池和具有 4 个线程的手动线程,您会发现性能差异很小。

ThreadPool大小可以配置,您生成的线程数也可以配置...将它们设置为相同的数字以进行有效的测试。