c++ 线程池记录

1:线程池基本概念就是一个池子,网上常见的用两种方式分配池子,一种是固定多少数据线程,一种是可以动态分配。各有利弊

c++ 实现线程池有多种方式(参考网上的)

一种是c++ 跨平台的线程池,基本使用c++ 标准库实现

一种是c++11方式实现,使用了c++11中新特性实现,比如future,thread等,这种方式实现起来更简单,代码量更少

2:线程池基本原理

2.1线程池优点:

      为了减少线程资源的重复分配和释放

  • 避免大量线程频繁创建和销毁带来的时间成本
    :如果在一开始即创建好线程,要用的时候直接从线程池中取出,用完再放回,这样就大大减少了创建与销毁带来的时间成本
  • 避免无限制的线程创建导致资源耗尽
    :线程池限制了线程的数量,这样就保证了不会因为线程创建过多导致资源耗竭,程序崩溃的情况

总之线程池通常适合下面的几个场合:

(1) 单位时间内处理任务频繁而且任务处理时间短;
(2) 对实时性要求较高。如果接受到任务后在创建线程,可能满足不了实时要求,因此必须采用线程池进行预创建。

2.2线程池基本框架:

1. 线程池管理器(ThreadPoolManager):用于创建并管理线程池

2. 工作线程(WorkThread): 线程池中线程

3. 任务队列:用于存放没有处理的任务。提供一种缓冲机制。

4. 用于添加任务的接口

总的来讲,就是先创建几个线程,然后这些线程等待任务队列,不为空拿出任务执行即可(任务可以是对象,也可以是某个函数)

 

流程图

此流程其实可以作为很多业务逻辑的解决方案,不只是线程池

具体代码参考:

此代码是linux版本

https://blog.csdn.net/tanhuifang520/article/details/107247167?utm_medium=distribute.pc_relevant.none-task-blog-baidujs_baidulandingword-1&spm=1001.2101.3001.4242

 

下面是window版本线程池

参考:

https://blog.csdn.net/liushengxi_root/article/details/83932654?utm_medium=distribute.pc_relevant.none-task-blog-baidujs_baidulandingword-0&spm=1001.2101.3001.4242

https://github.com/progschj/ThreadPool

https://blog.csdn.net/caoshangpa/article/details/80374651

https://blog.csdn.net/qq_35423154/article/details/106195372?utm_medium=distribute.pc_relevant.none-task-blog-baidujs_title-8&spm=1001.2101.3001.4242

 

 

 

 

 

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值