linux下设计一个简单的线程池

linux下设计一个简单的线程池

ID:5637191

大小:167.00 KB

页数:16页

时间:2017-12-20

linux下设计一个简单的线程池_第1页
linux下设计一个简单的线程池_第2页
linux下设计一个简单的线程池_第3页
linux下设计一个简单的线程池_第4页
linux下设计一个简单的线程池_第5页
资源描述:

《linux下设计一个简单的线程池》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、Linux下设计一个简单的线程池定义什么是线程池?简单点说,线程池就是有一堆已经创建好了的线程,初始它们都处于空闲等待状态,当有新的任务需要处理的时候,就从这个池子里面取一个空闲等待的线程来处理该任务,当处理完成了就再次把该线程放回池中,以供后面的任务使用。当池子里的线程全都处理忙碌状态时,线程池中没有可用的空闲等待线程,此时,根据需要选择创建一个新的线程并置入池中,或者通知任务线程池忙,稍后再试。为什么要用线程池?我们说,线程的创建和销毁比之进程的创建和销毁是轻量级的,但是当我们的任务需要大量进行大量线程的创建和销毁操作时,这个消耗就会变成的相当大

2、。比如,当你设计一个压力性能测试框架的时候,需要连续产生大量的并发操作,这个是时候,线程池就可以很好的帮上你的忙。线程池的好处就在于线程复用,一个任务处理完成后,当前线程可以直接处理下一个任务,而不是销毁后再创建,非常适用于连续产生大量并发任务的场合。线程池工作原理线程池中每一个线程的工作过程如下:图1:线程的工作流程线程池的任务就在于负责这些线程的创建,销毁和任务处理参数传递、唤醒和等待。1.创建若干线程,置入线程池2.任务达到时,从线程池取空闲线程3.取得了空闲线程,立即进行任务处理4.否则新建一个线程,并置入线程池,执行35.如果创建失败或者线

3、程池已满,根据设计策略选择返回错误或将任务置入处理队列,等待处理6.销毁线程池图2:线程池的工作原理线程池设计数据结构设计任务设计viewplaincopytoclipboardprint?1typedefstructtp_work_desc_sTpWorkDesc;2typedefvoid(*process_job)(TpWorkDesc*job);3structtp_work_desc_s{4void*ret;//callin,thatisarguments5void*arg;//callout,thatisreturnvalue1};其中,Tp

4、WorkDesc是任务参数描述,arg是传递给任务的参数,ret则是任务处理完成后的返回值;process_job函数是任务处理函数原型,每个任务处理函数都应该这样定义,然后将它作为参数传给线程池处理,线程池将会选择一个空闲线程通过调用该函数来进行任务处理;线程设计viewplaincopytoclipboardprint?2typedefstructtp_thread_info_sTpThreadInfo;3structtp_thread_info_s{4pthread_tthread_id;//threadidnum5TPBOOLis_busy;

5、//threadstatus:true-busy;flase-idle6pthread_cond_tthread_cond;7pthread_mutex_tthread_lock;8process_jobproc_fun;9TpWorkDesc*th_job;10TpThreadPool*tp_pool;11};TpThreadInfo是对一个线程的描述。thread_id是该线程的ID;is_busy用于标识该线程是否正处理忙碌状态;thread_cond用于任务处理时的唤醒和等待;thread_lock,用于任务加锁(此处保留);proc_fun

6、是当前任务的回调函数地址;th_job是任务的参数信息;tp_pool是所在线程池的指针;线程池设计viewplaincopytoclipboardprint?12typedefstructtp_thread_pool_sTpThreadPool;13structtp_thread_pool_s{1unsignedmin_th_num;//minthreadnumberinthepool2unsignedcur_th_num;//currentthreadnumberinthepool3unsignedmax_th_num;//maxthreadnu

7、mberinthepool4pthread_mutex_ttp_lock;5pthread_tmanage_thread_id;//managethreadidnum6TpThreadInfo*thread_info;7Queueidle_q;8TPBOOLstop_flag;9};TpThreadPool是对线程池的描述。min_th_num是线程池中至少存在的线程数,线程池初始化的过程中会创建min_th_num数量的线程;cur_th_num是线程池当前存在的线程数量;max_th_num则是线程池最多可以存在的线程数量;tp_lock用于线程

8、池管理时的互斥;manage_thread_id是线程池的管理线程ID;thread_info则是指向线程池

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。