ThreadPool icon indicating copy to clipboard operation
ThreadPool copied to clipboard

slower than loop?

Open nickhuangxinyu opened this issue 3 years ago • 3 comments

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?

nickhuangxinyu avatar May 23 '21 12:05 nickhuangxinyu

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.

wilx avatar May 23 '21 14:05 wilx

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

Zzzzzya avatar Oct 30 '23 15:10 Zzzzzya

Your task is too small

kadbbs avatar Feb 19 '24 12:02 kadbbs