线程池原理及C语言实现

一、简介
1、线程池的概念
  线程池本质就是线程的集合。 进程在启动时便创建一定数量的线程,在没有任务时,这些线程处于空闲状态。程序在运行时可将任务通过任务队列传递给线程池,这是池中的线程便会启动一个来执行该任务,任务执行完后,启动的线程不会被销毁,而是重新返回空闲状态,等待下一个任务的执行。
2、线程池的优势
  在多线程运行的程序中,如果不断地创建和销毁线程,会过度消耗系统资源,内核开销较大。并且过度切换线程会带来一定的危险,从而增加系统崩溃的可能性。
  线程池会维护相对稳定的线程数,减少了频繁创建、销毁线程带来的开销以及线程切换带来的危险。
3、线程池通常的使用流程
  a、向线程池添加任务。 将任务的接口地址和参数传入任务队列,并通过条件变量通知线程池进行处理。
  b、处于空闲状态的任务会等待条件变量,当条件变量发出时,线程池中的哪一个线程被唤醒的不可预判的。

二、代码实现
  为了方便代码优化和问题修复,代码放在github仓库中,地址如下:
  C语言实现线程池
  https://github.com/ruiyun-liao/thread_pool_c.git
  注意:代码可直接编译运行,经过较为简单的测试,但未经过长时间压力测试,重要场慎重使用。

三、线程池的主要模块
1、任务队列
  任务队列使用环形队列实现,队列中元素信息包含任务接口地址和传给任务的参数,参数类型通常为void *,在这份代码中,参数需使用malloc动态分配,由线程池负责释放。
2、池中线程
  即线程池维护的用来执行任务的一定数量的线程,平时通过监控条件变量处于空闲状态,当条件变量产生时,处于空闲状态的所有池中线程对于产生的条件变量进行抢夺,抢到的线程可以从任务队列中取任务执行,其他的线程依然处于空闲状态,激活的线程在任务执行完毕后返回空闲状态,重新监控条件变量。
3、管理员线程
  线程池维护一个固定的线程,定时执行,用于维持任务密度和池中线程数的相对平衡。当多数池中线程处于空闲状态时,适当减少线程的数量,当线程多处于忙碌状态,任务量过大时,适当增加一定数量的线程来执行任务。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值