首页UC › linux下C 线程池的原理讲解和代码实现(能自行伸缩扩展线程数)

linux下C 线程池的原理讲解和代码实现(能自行伸缩扩展线程数)

什么线程池,为什么要使用线程池?下面是一个比喻。

阶段一、一个医院,每天面对成千上万的病人,处理方式是:来一个病人找来一个医生处理,处理完了医生也走了。当看病时间较短的时候,医生来去的时间,显得尤为费时了。

阶段二、医院引进了线程池的概念。设置门诊,把医生全派出去坐诊,病人来看病先挂号排队,医生根据病人队列顺序依次处理各个病人,这样就省去医生来来去去的时间了。但是,很多时候病人不多,医生却很多导致很多医生空闲浪费水电资源撒。

阶段三、医院引进了可伸缩性线程池的概念,如阶段二,但是门诊一开始只派出了部分医生,但是增加了一个领导,病人依旧是排队看病,领导负责协调整个医院的医生。当病人很多医生忙不过来的时候,领导就去多叫几个医生来帮忙;当病人不多医生太多的时候,领导就叫一些医生回家休息去免得浪费医院资源。

阶段三就是一个线程池的例子。

线程池包括:n个执行任务的线程,一个任务队列,一个管理线程

1、预先启动一些线程,线程负责执行任务队列中的任务,当队列空时,线程挂起。

2、调用的时候,直接往任务队列添加任务,并发信号通知线程队列非空。

3、管理线程负责监控任务队列和系统中的线程状态,当任务队列为空,线程数目多且很多处于空闲的时候,便通知一些线程退出以节约系统资源;当任务队列排队任务多且线程都在忙,便负责再多启动一些线程来执行任务,以确保任务执行效率。

下面是代码(下载附件):运行环境Ubuntu 12.04
threadpool.cc

threadpool.h

threadpool.tar.gz 下载

发表评论