线程池实现代码分析(一)
2012-03-26 13:25
218 查看
线程池实现代码分析(一)
线程池是一种多线程处理形式,处理过程中将任务添加到队列,然后在创建线程后自动启动这些任务。线程池线程都是后台线程.每个线程都使用默认的堆栈大小,以默认的优先级运行,并处于多线程单元中.如果某个线程在托管代码中空闲(如正在等待某个事件),则线程池将插入另一个辅助线程来使所有处理器保持繁忙.如果所有线程池线程都始终保持繁忙,但队列中包含挂起的工作,则线程池将在一段时间后创建另一个辅助线程但线程的数目永远不会超过最大值.超过最大值的线程可以排队,但他们要等到其他线程完成后才启动.
Ø 创建一个线程池
线程池的核心数据结构如下:
其中attr描述了线程池的基本属性,包涵了下面一些属性,
线程池的使用包括线程池的各种状态,池中最大,最小的线程数,每个线程维持的作业数,以及池所应用的调度策略等各种属性。
在线程池的使用之前,需要调用ThreadPoolInit对其初始化,整个初始化过程即是填充ThreadPool结构体。主要包括:1:初始化互斥和条件变量;2:设定调度策略;3:初始化FreeList(主要用于存放线程池的空闲节点,其中每个节点为ThreadPoolJob大小,用于存放任务的各个属性);4:初始化线程池的各种统计量;5:初始化高中低作业队列;6:始化其他参数;7:创建一个工作线程。
Ø 线程池如何工作
一个线程池至少要包括4个组成部分,分别为:
1.线程池管理器(ThreadPool):用于创建并管理线程池,包括创建线程池,销毁线程池,添加新任务;
2.工作线程(WorkerThread):线程池中线程,在没有任务时处于等待状态,可以循环的执行任务;
3.任务接口(ThreadPoolJob):每个任务必须实现的接口,以供工作线程调度任务的执行,它主要规定了任务的入口,任务执行完后的收尾工作,任务的执行状态等;
4.任务队列(LinkedList):用于存放没有处理的任务。提供一种缓冲机制。
1) 下面代码主要用于创建一个新的线程池:
函数的主要功能是创建一个线程池,初始化线程池的各种属性。如他的调度策略各种状态变量,各种优先级的任务队列等。
2) 创建一个工作线程。
在754行,有个CreateWorker(tp),用于创建一个线程池的工作线程。新创建的线程的入口函数为为WorkerThread,源码如下:
3) 任务接口
ThreadPoolJob规定了任务的接口,工作线程根据ThreadPoolJob的参数来调度工作任务。工作线程首先判断ThreadPoolJob手否是persistentJob,如果是,则调度,否则分别从高中低队列进行调度。代码集中在474-519。
4) 任务队列
任务队列主要是用于存放没有处理的任务,任务队列通过ThreadWork线程调度。
复制搜索
复制搜索
线程池是一种多线程处理形式,处理过程中将任务添加到队列,然后在创建线程后自动启动这些任务。线程池线程都是后台线程.每个线程都使用默认的堆栈大小,以默认的优先级运行,并处于多线程单元中.如果某个线程在托管代码中空闲(如正在等待某个事件),则线程池将插入另一个辅助线程来使所有处理器保持繁忙.如果所有线程池线程都始终保持繁忙,但队列中包含挂起的工作,则线程池将在一段时间后创建另一个辅助线程但线程的数目永远不会超过最大值.超过最大值的线程可以排队,但他们要等到其他线程完成后才启动.
Ø 创建一个线程池
线程池的核心数据结构如下:
其中attr描述了线程池的基本属性,包涵了下面一些属性,
线程池的使用包括线程池的各种状态,池中最大,最小的线程数,每个线程维持的作业数,以及池所应用的调度策略等各种属性。
在线程池的使用之前,需要调用ThreadPoolInit对其初始化,整个初始化过程即是填充ThreadPool结构体。主要包括:1:初始化互斥和条件变量;2:设定调度策略;3:初始化FreeList(主要用于存放线程池的空闲节点,其中每个节点为ThreadPoolJob大小,用于存放任务的各个属性);4:初始化线程池的各种统计量;5:初始化高中低作业队列;6:始化其他参数;7:创建一个工作线程。
Ø 线程池如何工作
一个线程池至少要包括4个组成部分,分别为:
1.线程池管理器(ThreadPool):用于创建并管理线程池,包括创建线程池,销毁线程池,添加新任务;
2.工作线程(WorkerThread):线程池中线程,在没有任务时处于等待状态,可以循环的执行任务;
3.任务接口(ThreadPoolJob):每个任务必须实现的接口,以供工作线程调度任务的执行,它主要规定了任务的入口,任务执行完后的收尾工作,任务的执行状态等;
4.任务队列(LinkedList):用于存放没有处理的任务。提供一种缓冲机制。
1) 下面代码主要用于创建一个新的线程池:
函数的主要功能是创建一个线程池,初始化线程池的各种属性。如他的调度策略各种状态变量,各种优先级的任务队列等。
2) 创建一个工作线程。
在754行,有个CreateWorker(tp),用于创建一个线程池的工作线程。新创建的线程的入口函数为为WorkerThread,源码如下:
3) 任务接口
ThreadPoolJob规定了任务的接口,工作线程根据ThreadPoolJob的参数来调度工作任务。工作线程首先判断ThreadPoolJob手否是persistentJob,如果是,则调度,否则分别从高中低队列进行调度。代码集中在474-519。
4) 任务队列
任务队列主要是用于存放没有处理的任务,任务队列通过ThreadWork线程调度。
复制搜索
复制搜索
相关文章推荐
- java中的线程池实现以及代码分析
- w3af代码分析,w3af线程池实现,w3af 调适环境配置,w3af win7开发环境
- 枚举类型的案例分析及代码实现
- MFC树形控件详细分析与代码实现
- Java JVM 2:垃圾收集算法 - 标记整理算法(伪代码实现与深入分析)
- 基于visual c++之windows核心编程代码分析 实现开机自启动
- JAVA实现简单系统登陆注册模块的设计(附详细代码分析)
- Java NIO原理图文分析及代码实现
- 触摸屏代码分析——实现按下中断
- Linux Signal实现代码分析
- 线程池浅析及C++代码实现
- three.js实现3D影院的原理的代码分析
- Java NIO原理图文分析及代码实现
- Android_开源框架_Volley(Google IO 2013)源代码及内部实现分析
- jQuery 选择器项目实例分析及实现代码
- 多线程之:几种线程池的实现算法分析
- SRS 代码分析【DVR录像实现】
- SPFA 原理剖析代码实现分析比较
- 素数判断的几种方法代码实现及其复杂度分析
- pc-lint静态代码分析工具(检查linux下C++代码的实现方式)