C/C++手撕线程池(线程池的封装和实现)
本文使用的源码地址:
https://github.com/SCljh/thread_pool
线程池描述
池式结构
在计算机体系结构中有许多池式结构:内存池、数据库连接池、请求池、消息队列、
对象池等等。
池式结构解决的主要问题为缓冲问题,起到的是缓冲区的作用。
线程池
通过使用线程池,我们可以有效降低多线程操作中任务申请和释放产生的性能消耗。
特别是当我们每个线程的任务处理比较快时,系统大部分性能消耗都花在了
pthread_create以及释放线程的过程中。
那既然是这样的话,何不在程序开始运行阶段提前创建好一堆线程,
等我们需要用的时候只要去这一堆线程中领一个线程,用完了再放回去,
等程序运行结束时统一释放这一堆线程呢?按照这个想法,线程池出现了。
线程池解决的问题
解决任务处理
阻塞IO
解决线程创建于销毁的成本问题
管理线程
线程池应用之一:日志存储
在服务器保存日志至磁盘上时,性能往往压在磁盘读写上,
而引入线程池利用异步解耦可以解决磁盘读写性能问题。
线程池的主要作用:异步解耦
说了那么多线程池的优点,那接下来要做的就是手撕这诱人的玩意了。
朴实无华但不枯燥的代码(以c++为例)
本文主要讲解的是c++线程池的实现,C语言实现其实思想和c++是一致的,
具体的代码可见文章开头的链接。
线程池中比较关键的东西
若想自己编写一个线程池框架,那么可以先关注线程池中比较关键的东西:
工作队列
任务队列
线程池的池
pthread_create中的回调函数
为什么说这些东西比较关键?因为这“大四元”基本上支撑起了整个线程池的框架。
而线程池的框架如下所示:
————————————————
原文链接:https://blog.csdn.net/ACMer_L/article/details/107578636
*博客内容为网友个人发布,仅代表博主个人观点,如有侵权请联系工作人员删除。