dot net程池ThreadPool.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
dot net线程池ThreadPool一、线程池的适用范围   在日常使用多线程开发的时候,一般都构造一个Thread示例,然后调用Start使之执行。如果一个线程它大部分时间花费在等待某个事件响应 的发生然后才予以响应;或者如果在一定期间内重复性地大量创建线程。这些时候个人感觉利用线程池(ThreadPool)会比单纯创建线程 (Thread)要好。这是由于线程池能在需要的时候把空闲的线程提取出来使用,在线程使用完毕的时候对线程回收达到对象复用的效果。这个就涉及到池的性 质了。线程(Thread)很容易跟数据库连接、流、Socket套接字这部分非托管资源归在一起,但是个人认为Thread并不是非托管资源,有个低级 点的判别办法,就是Thread没有去实现IDispose接口,利用Reflector打开去查看的话,里面就有一个析构函数~Thread()它实际 上是调用了一个外部方法InternalFinalize(),估计这个就涉及到CLR里面的东西了。如果频繁开启线程,对资源的消耗会比用线程池的要 多。 二、池的容量和对象管理   既然上面提及到池的性质,在TheardPool这个线程池中也可以看到一个对象池的特点,这个可以在日后我们创建对象池时可以作为参考。虽然 本人以前也写过一个Socket的对象池,但是运行起来的性能不好。CLR内部其实拥有一个数据库连接的对象池,实现的效果跟ThreadPool类似,能让对象复用。   在以前定义Socket池时只定义了一个对象上限,没有下限的概念;在ThreadPool中,池内对象的上下限都可以进行设置和获取 1 public static bool SetMinThreads(int workerThreads, int completionPortThreads); 2 public static bool SetMaxThreads(int workerThreads, int completionPortThreads); 3 4 public static void GetMaxThreads(out int workerThreads, out int completionPortThreads); 5 public static void GetMinThreads(out int workerThreads, out int completionPortThreads);   至于这里有两种线程的原因迟点再提。MinThread指的是线程池初始或者空闲时保留最少的线程数,这个值与CLR的版本和CPU的核心数有关系。在CLR SP1之前的版本中,线程池默认最大线程数是 ?处理器数 * 25,在CLR SP1之后默认最大线程数是?处理器数 * 250。最少线程数则是 处理器数,于是我也尝试了一下。不过这里又涉及到CLR与.NET Framework的关系。 .NET Framework | CLR --------------------------------------- 2.0 RTM      | 2.0.50727.42 2.0 SP1      | 2.0.50727.1433 2.0 SP2      | 2.0.50727.3053 3.0 RTM      | 2.0 RTM 3.0 SP1     | 2.0 SP1 3.0 SP2     | 2.0 SP2 3.5 RTM      | 2.0 SP1 3.5 SP1      | 2.0 SP2 4.0 RTM      | 4.0.30319.1 我自己通过 Environment类的Version属性获取CLR的版本号。下面这段代码,我使用几个版本的.NET Framework去编译 。 int i1,i2; ThreadPool.GetMaxThreads(out i1, out i2); Console.WriteLine(Max workerThreads :+ i1+ completionPortThreads:+i2); ThreadPool.GetMinThreads(out i1,out i2); Console.WriteLine(Min workerThreads:+i1 + completionPortThreads: + i2); Console.WriteLine( CLR Version: {0} , Environment.Version); 得出的结果有点失望,失望的不是与上面说

文档评论(0)

pao0969363mou8 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档