C++线程池

时间:2022-08-22 14:48:09

  之前一直在找一个开源的C++线程池库,找了很久也没有找到一个好用的,后来项目需要,

本想自己写一个,但是无意中在github上面找了一个采用boost库实现的threadpool,后来研究

了一下源码,觉得非常好用。

代码地址:https://github.com/henkel/threadpool

1、代码风格:采用boost的风格,内部使用了大量的C++高级操作,包括了template,shared_ptr,traits;采用boost里面

的bind,future的库函数实现多态。

2、代码不到1000多行,实现很多功能,包括fifo,lifo,prifo等队列;

3、支持wait的超时操作;

4、支持多种任务执行,也就是说线程池中的可执行线程不受具体的task约束,如果不采用boost的bind操作,需要开发者使用

继承的思想来进行操作。

具体代码如下:

boost::shared_ptr<merge_job<image> > job(new merge_job<image>(data, partition*partition_size, partition_size));

schedule(tp, boost::bind(&merge_job<image>::run, job));

tp为线程池;

5、这个代码块代码的很好,但是少了一些文档,小弟我来补充一些:

测试数据地址:./libs/threadpool/example/mergesort/

直接编译:g++ mergesort.cpp -g -o mergesort -I../../../.. -I/usr/local/include/ -L/usr/local/lib -lpthread -lboost_thread

6、线程池可能出现的问题:

  当在使用线程池的时候,特别容易忽视的一个问题就是当多个线程共享线程池的时候,可能一个线程的处理速度比较慢的的情况下,占用了

线程池的所有线程,将线程池中的任务队列占满,到时其他处理线程的处理性能下降,增大了超时。所以线程池的使用希望能够针对同一个

类型的任务分配一个线程池。