标签:
1、为什么需要线程池?
部分应用程序需要执行很多细小的任务,对于每个任务都创建一个线程来完成,任务完成后销毁线程,而这就会产生一个问题:当执行的任务所需要的时间T1小于等于创建线程时间T2和销毁线程时间T3总和时即T1 <= T2 + T3,应用处理任务的响应能力会大大减弱,从而影响了应用程序性能,为了解决这类问题,线程池技术提供了很好的解决方案。线程池顾名思义就是把线程资源池化,在应用启动时一次性创建合适数量的线程,当需要执行任务时就从线程池中分配一个已经创建好的线程来执行,执行完在把线程归还,只在应用停时再一次性销毁所有的线程。
2、线程池的基本组成部分
一个简单的线程池至少包括下列的组成部分:
1)线程池管理器(ThreadPool):用于创建一个线程池对象并管理线程池,如分配任务给某个空闲线程,查看当前线程状态等等的操作。
2)工作线程(WorkThread):线程池中线程,可能是挂起,可能是被分配了任务,若然是挂起,则用一个信号量去阻塞直到有任务分配。
3)任务接口(Task):每个任务必须实行的接口,以供工作线程调度任务执行。
3、Unix下的线程池实现
将给大家展示的线程池实现的类如下,含有比较多的面向对象设计思想。
主要是
一个线程池管理多个工作线程类,每个工作线程类对象管理一个线程。
1)Mutex:互斥量类,里面只有一个pthread_mutex_t的私有成员,对POSIX互斥量进行封装,后面用于线程池的队列和栈。
Mutex.h
1 #ifndef MUTEX_H 2 #define MUTEX_H 3 4 #include <iostream> 5 #include <pthread.h> 6 using namespace std; 7 8 class Mutex 9 { 10 public: 11 Mutex(); 12 void Lock(); 13 void Unlock(); 14 15 private: 16 pthread_mutex_t mutex; 17 }; 18 19 #endif
标签:
原文地址:http://www.cnblogs.com/lewiskyo/p/4607040.html