之前一直在找一个开源的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、线程池可能出现的问题:
当在使用线程池的时候,特别容易忽视的一个问题就是当多个线程共享线程池的时候,可能一个线程的处理速度比较慢的的情况下,占用了
线程池的所有线程,将线程池中的任务队列占满,到时其他处理线程的处理性能下降,增大了超时。所以线程池的使用希望能够针对同一个
类型的任务分配一个线程池。