首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 其他教程 > 操作系统 >

一行来学POSIX thread 之 综合应用——线程池

2013-02-19 
一起来学POSIX thread 之 综合应用——线程池一起来学POSIX thread 之 综合应用——线程池1、为什么需要线程池?

一起来学POSIX thread 之 综合应用——线程池

一起来学POSIX thread 之 综合应用——线程池

1、为什么需要线程池?

部分应用程序需要执行很多细小的任务,对于每个任务都创建一个线程来完成,任务完成后销毁线程,而这就会产生一个问题:当执行的任务所需要的时间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秒就多添加一个任务,此时线程池就动态添加一个线程。


热点排行