一起来学POSIX thread 之 综合应用——线程池
部分应用程序需要执行很多细小的任务,对于每个任务都创建一个线程来完成,任务完成后销毁线程,而这就会产生一个问题:当执行的任务所需要的时间T1小于等于创建线程时间T2和销毁线程时间T3总和时即T1 <= T2 + T3,应用处理任务的响应能力会大大减弱,从而影响了应用程序性能,为了解决这类问题,线程池技术提供了很好的解决方案。线程池顾名思义就是把线程资源池化,在应用启动时一次性创建合适数量的线程,当需要执行任务时就从线程池中分配一个已经创建好的线程来执行,执行完在把线程归还,只在应用停时再一次性销毁所有的线程。
2、线程池的基本组成部分一个简单的线程池至少包括下列的组成部分:
1)线程池管理器(ThreadPool):用于创建并管理线程池
2)工作线程(WorkThread):线程池中线程
3)任务接口(Task):每个任务必须实行的接口,以供工作线程调度任务执行。
3、Unix下的线程池实现将给大家展示的线程池实现的类如下:
1)CMutex:互斥量类,对POSIX互斥量的C++封装
2)CAutoMutex:利用C++构造函数和析构函数的特性,实现CAutoMutex变量生命周期内对共享数据的加锁互斥量。
3)CTask:任务的抽象基类,任何具体的任务都要继承该类,并实现自己的void * run()函数。
4)CThread:线程基类,对POSIX线程的C++封装。
5)CWorkThread:工作线程类,实现了执行任务的基本接口
6)CThreadPool:线程池管理类,实现线程的创建管理和任务调度。
一下提供具体实现代码和一个简单的Demo如下:
AutoMutex.h
运行结果分析如下:初始化创建线程池时,只有一个线程,后续隔4秒就多添加一个任务,此时线程池就动态添加一个线程。