ThreadPool
ThreadPool copied to clipboard
slower than loop?
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?
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.
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
Your task is too small