Github地址: https://github.com/wujin1989/cdk
首先cdk的线程池实现只用了100行左右代码,非常精简。有兴趣的可以阅读一下,中规中矩。只要项目对线程池性能要求不是非常的苛刻,我觉得100行的线程池足矣。
但是,如果非要追求极致性能,基于cdk的线程池可以很方便的扩展,比如:
- 使用lock-free queue。
- 线程每次从queue里读取多个job,然后放进当前线程的私有queue。这样可以减少lock的开销。
总而言之,基于cdk的thread pool 应该可以很容易扩展。
好了,下面看看cdk的thread pool 如何使用吧。
cdk线程池的使用:
#include "cdk.h"
void task_func(void* p) {
printf("[%d] doing task.\n", (int)cdk_gettid());
}
int main(void) {
thrdpool_t* tp;
tp = cdk_thrdpool_create();
for (int i = 0; i < 50; i++) {
thrdpool_job_t* job;
job = malloc(sizeof(thrdpool_job_t));
if (!job) {
return -1;
}
job->fn = task_func;
job->p = NULL;
cdk_queue_init_node(&job->q_n);
cdk_thrdpool_post(tp, job);
}
while (1);
cdk_thrdpool_destroy(tp);
return 0;
}
怎么样?是不是很简单。快点尝试吧!