异步编程:使用线程池管理线程 从此图中我们会发现 .NET 与C# 的每个版本发布都是有一个“主题”。即:C#1.0托管代码→C#2.0泛型→C#3.0LINQ→C#4.0动态语言& ...
异步编程:使用get='_blank'>线程池管理线程
从此图中我们会发现 .NET 与C# 的每个版本发布都是有一个“主题”。即:C#1.0托管代码→C#2.0泛型→C#3.0LINQ→C#4.0动态语言→C#5.0异步编程。现在我为最新版本的“异步编程”主题写系列分享,期待你的查看及点评。
如今的应用程序越来越复杂,我们常常需要使用《异步编程:线程概述及使用》中提到的多线程技术来提高应用程序的响应速度。这时我们频繁的创建和销毁线程来让应用程序快速响应操作,这频繁的创建和销毁无疑会降低应用程序性能,我们可以引入缓存机制解决这个问题,此缓存机制需要解决如:缓存的大小问题、排队执行任务、调度空闲线程、按需创建新线程及销毁多余空闲线程……如今微软已经为我们提供了现成的缓存机制:线程池
线程池原自于对象池,在详细解说明线程池前让我们先来了解下何为对象池。
流程图:
对于对象池的清理通常设计两种方式:
1) 手动清理,即主动调用清理的方法。
2) 自动清理,即通过System.Threading.Timer来实现定时清理。
关键实现代码:
public sealed class ObjectPool<T> where T : ICacheObjectProxy<T>{ // 最大容量 private Int32 m_maxPoolCount = 30; // 最小容量 private Int32 m_minPoolCount = 5; // 已存容量 private Int32 m_currentCount; // 空闲+被用 对象列表 private Hashtable m_listObjects; // 最大空闲时间 private int maxIdleTime = 120; // 定时清理对象池对象 private Timer timer = null; /// <summary> /// 创建对象池 /// </summary> /// <param name="maxPoolCount">最小容量</param> /// <param name="minPoolCount">最大容量</param> /// <param name="create_params">待创建的实际对象的参数</param> public ObjectPool(Int32 maxPoolCount, Int32 minPoolCount, Object[] create_params){ } /// <summary> /// 获取一个对象实例 /// </summary> /// <returns>返回内部实际对象,若返回null则线程池已满</returns> public T GetOne(){ } /// <summary> /// 释放该对象池 /// </summary> public void Dispose(){ } /// <summary> /// 将对象池中指定的对象重置并设置为空闲状态 /// </summary> public void ReturnOne(T obj){ } /// <summary> /// 手动清理对象池 /// </summary> public void ManualReleaseObject(){ } /// <summary> /// 自动清理对象池(对大于 最小容量 的空闲对象进行释放) /// </summary> private void AutoReleaseObject(Object obj){ }}
原标题:异步编程:使用线程池管理线程
关键词:异步
*特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们:
admin#shaoqun.com
(#换成@)。