你的位置:首页 > 软件开发 > ASP.net > 异步编程:使用线程池管理线程

异步编程:使用线程池管理线程

发布时间:2016-08-17 16:00:10
异步编程:使用线程池管理线程 从此图中我们会发现 .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 (#换成@)。