最近仔细看了一下https://github.com/henkel/threadpool代码,总体感觉非常精巧,使用了 boost库的bind function完成了线程池与业务端的完全解耦;所有的任务最终都会被封装成为 function对象push进入队列。
这个库里面用了几个boost库里面的类,如recursivemutex,referencewrapper,thread等;有兴趣的 可以研究一下。
首先来说threadpool的结构:
之前在读这段代码的时候,worker中采用threadpool的execute_task函数作为线程的可执行函数,这样保证了 所有线程与任务队列的解耦,任务队列里面可以采用多重的策略,如果放到了worker会影响程序的可维护性, 很多策略也发挥不了作用