博客专栏

EEPW首页 > 博客 > C/C++手撕线程池(线程池的封装和实现)

C/C++手撕线程池(线程池的封装和实现)

发布人:电子禅石 时间:2024-04-09 来源:工程师 发布文章

本文使用的源码地址:

https://github.com/SCljh/thread_pool


线程池描述


池式结构

  在计算机体系结构中有许多池式结构:内存池、数据库连接池、请求池、消息队列、

对象池等等。


  池式结构解决的主要问题为缓冲问题,起到的是缓冲区的作用。


线程池

 通过使用线程池,我们可以有效降低多线程操作中任务申请和释放产生的性能消耗。

    特别是当我们每个线程的任务处理比较快时,系统大部分性能消耗都花在了

    pthread_create以及释放线程的过程中。

那既然是这样的话,何不在程序开始运行阶段提前创建好一堆线程,

等我们需要用的时候只要去这一堆线程中领一个线程,用完了再放回去,

等程序运行结束时统一释放这一堆线程呢?按照这个想法,线程池出现了。


线程池解决的问题

解决任务处理

阻塞IO

解决线程创建于销毁的成本问题

管理线程

  线程池应用之一:日志存储


  在服务器保存日志至磁盘上时,性能往往压在磁盘读写上,

     而引入线程池利用异步解耦可以解决磁盘读写性能问题。


  线程池的主要作用:异步解耦

说了那么多线程池的优点,那接下来要做的就是手撕这诱人的玩意了。


朴实无华但不枯燥的代码(以c++为例)

本文主要讲解的是c++线程池的实现,C语言实现其实思想和c++是一致的,

具体的代码可见文章开头的链接。


线程池中比较关键的东西

  若想自己编写一个线程池框架,那么可以先关注线程池中比较关键的东西:


工作队列

任务队列

线程池的池

pthread_create中的回调函数

为什么说这些东西比较关键?因为这“大四元”基本上支撑起了整个线程池的框架。

而线程池的框架如下所示:

————————————————

线程池

                        

原文链接:https://blog.csdn.net/ACMer_L/article/details/107578636


*博客内容为网友个人发布,仅代表博主个人观点,如有侵权请联系工作人员删除。



关键词: threadpool

技术专区

关闭