本文主要参考博客用C++实现的一个比较简单的线程池。
一、为什么使用线程池。
线程的创建和销毁都需要耗费系统资源的。假设某个线程创建、运行、销毁的时间分别是
t
1
,
t
2
,
t
3
t_1,t_2,t_3
t1,t2,t3,若
t
1
+
t
3
t1+t3
t1+t3的时间相对于
t
2
t_2
t2来说是不可忽略的,线程池的引入是十分有必要的。特别是处理百万级别的高并发时。线程池提升了多线程程序的性能,因为线程池里的线程都是现成的而且能够重复使用的,不需要大量的创建和销毁线程。
二、线程池原理
线程池中主要有两个操作:
1.主程序不定时地向线程池添加添加任务
2.线程池里的线程任务领取任务去执行
从上面可以看出是一个典型的生产者-消费者同步问题。所以我们需要一个队列,主程序(生产者)往队列里加任务,线程(消费者)执行任务,这个过程需要保证同一时刻只有一个线程能取出任务。因此,我们需要互斥锁来保护队列,同时还需要条件变量来处理主线程通知任务到达、工作线程抢夺任务的问题。
一般来说实现一个线程池主要包括以下4个部分:
1.线程管理器:用于创建并管理线程池
2.工作线程:线程池中实际执行任务的线程
3.任务接口:每个任务必须实现的接口
4.任务队列:用来存放没有处理的任务。
代码见github地址:线程池。
基于linux系统简单的线程池C++实现
最新推荐文章于 2024-06-03 16:23:52 发布