progschj / ThreadPool

A simple C++11 Thread Pool implementation
zlib License
7.63k stars 2.21k forks source link

slower than loop? #84

Open nickhuangxinyu opened 3 years ago

nickhuangxinyu commented 3 years ago

I test the threadpool with this code:

#include "util/time_util.h"
#include "ThreadPool/ThreadPool.h"

size_t i = 0;
void test() {
  // printf("hah\n");
  i++;
  i++;
}

#define N 1000000
void fun1() {
  printf("func1\n");
  ThreadPool pool(10);
  for (int i = 0; i < N; ++i) {
    pool.enqueue(test);
  }
}

void fun2() {
  printf("func2\n");
  for (int i = 0; i < N; ++i) {
    test();
  }
}

int main(int argc, char** argv) {
  util::time_util::Timer t;
  t.StartTimer();
  if (argc == 1) {
    fun1();
  } else {
    fun2();
  }
  printf("i=%d\n", i); 
  t.EndTimer("1");
}

I found thread pool cost 5s, but loop just cost 0.005s

why threadpool not speed up?

wilx commented 3 years ago

You have basically re-discovered Amdalh's law. Creating the threads and maintaining the queue costs time and the code you execute in the threads is very short. Also, it probably synchronizes on the output as well.

Zzzzzya commented 8 months ago

Creating a thread does not mean that dealing with tasks will be fast. u create a pool with 10 threads. creating thread is quiet more expensive than u think. That's exactly why we need threadpool , avoiding create and destroy threads too many times

kadbbs commented 4 months ago

Your task is too small