《C#并行编程高级教程》第8章 线程池 笔记
2013-08-07 23:27
190 查看
主要的几个概念(详细最好还是看书,配合插图看)
任务是会被分配到线程上的,而这些线程都在线程池引擎下管理
线程池引擎管理着合适数量的线程池,线程从全局队列获取工作项执行。
.NET4 Framework 4改进了全局队列的加入和退出算法,使用了无锁的方式。
通常还是建议使用包装后的Task,但是也是可以直接为ThreadPool加入工作项的,参考代码如下
ThreadPool.QueueUserWorkItem(
(state) =>
{
//...
}, param);
其中param是一个Object,用于传入参数。而在callback中以state使用。
使用ThreadPool.QueueUserWorkItem,是没法获得要执行的工作项的标识符的。
有一个局部队列的概念,指每个工作线程中的队列。
在主线程或者没有分配任务的线程上下文创建和启动任务,这些任务在全局队列中竞争。
如果是在其他任务的上下文中创建的任务,就会利用局部队列来优化效率。
主要原因是,上下文切换代价大,而且可以保持高速缓存的命中率。
如果有必要的话,可以自行制定任务调度器,参考代码如下。
来自为知笔记(Wiz)
任务是会被分配到线程上的,而这些线程都在线程池引擎下管理
线程池引擎管理着合适数量的线程池,线程从全局队列获取工作项执行。
.NET4 Framework 4改进了全局队列的加入和退出算法,使用了无锁的方式。
通常还是建议使用包装后的Task,但是也是可以直接为ThreadPool加入工作项的,参考代码如下
ThreadPool.QueueUserWorkItem(
(state) =>
{
//...
}, param);
其中param是一个Object,用于传入参数。而在callback中以state使用。
使用ThreadPool.QueueUserWorkItem,是没法获得要执行的工作项的标识符的。
有一个局部队列的概念,指每个工作线程中的队列。
在主线程或者没有分配任务的线程上下文创建和启动任务,这些任务在全局队列中竞争。
如果是在其他任务的上下文中创建的任务,就会利用局部队列来优化效率。
主要原因是,上下文切换代价大,而且可以保持高速缓存的命中率。
如果有必要的话,可以自行制定任务调度器,参考代码如下。
来自为知笔记(Wiz)
相关文章推荐
- cocos2d-x Programmers Guide v3.3 译本和阅读笔记(第8章:事件派发器)
- Java高并发程序设计笔记(四)之线程池
- 线程池深入解析笔记
- [学习笔记][Java编程思想]第8章:多态
- 学习笔记之深入浅出MFC 第8章 C++重要性质--- 执行期类型信息(RTTI)
- 【学习笔记】多线程编程-线程池/任务/线程
- LINUX编程学习笔记之有界线程池
- 线程池常用类学习笔记
- java多线程总结笔记2——线程池
- 算法导论学习笔记-第8章 线性时间排序
- Python学习笔记(五) -- Python线程池
- 线程复用:线程池笔记
- redis实战笔记(8)-第8章 构建简单的社交网站
- C# 2010 从入门到精通 学习笔记7 第8章 理解值和引用
- 线程池学习笔记
- Think in java学习笔记-第8章 Interfaces
- 读C#线程及线程池笔记
- python 学习笔记简单线程池实现
- Beginning Spring学习笔记——第8章 Spring AOP
- 线程学习笔记(十二)-线程池