1:线程池基本概念就是一个池子,网上常见的用两种方式分配池子,一种是固定多少数据线程,一种是可以动态分配。各有利弊
c++ 实现线程池有多种方式(参考网上的)
一种是c++ 跨平台的线程池,基本使用c++ 标准库实现
一种是c++11方式实现,使用了c++11中新特性实现,比如future,thread等,这种方式实现起来更简单,代码量更少
2:线程池基本原理
2.1线程池优点:
为了减少线程资源的重复分配和释放
- 避免大量线程频繁创建和销毁带来的时间成本
:如果在一开始即创建好线程,要用的时候直接从线程池中取出,用完再放回,这样就大大减少了创建与销毁带来的时间成本 - 避免无限制的线程创建导致资源耗尽
:线程池限制了线程的数量,这样就保证了不会因为线程创建过多导致资源耗竭,程序崩溃的情况
总之线程池通常适合下面的几个场合:
(1) 单位时间内处理任务频繁而且任务处理时间短;
(2) 对实时性要求较高。如果接受到任务后在创建线程,可能满足不了实时要求,因此必须采用线程池进行预创建。
2.2线程池基本框架:
1. 线程池管理器(ThreadPoolManager):用于创建并管理线程池
2. 工作线程(WorkThread): 线程池中线程
3. 任务队列:用于存放没有处理的任务。提供一种缓冲机制。
4. 用于添加任务的接口
总的来讲,就是先创建几个线程,然后这些线程等待任务队列,不为空拿出任务执行即可(任务可以是对象,也可以是某个函数)
流程图
此流程其实可以作为很多业务逻辑的解决方案,不只是线程池
具体代码参考:
此代码是linux版本
下面是window版本线程池
参考:
https://github.com/progschj/ThreadPool
https://blog.youkuaiyun.com/caoshangpa/article/details/80374651