当前位置:  -> 首页 -> 如何设置线程池并发线程的最大数量(C#)

上一篇 | 下一篇
如何设置线程池并发线程的最大数量(C#)
作者:洛羽叶  点击率:12001  发布时间:2009-01-29

线程池的最大线程并发数量根据处理器的不同会有默认值,比如我的P4 CPU的电脑上线程池中辅助线程的最大数目是25,

有的时候我们需要根据实际的需要更改这个数值提高并发能力。
 
在.NET FrameWork2.0以前我们需要声明API来达到这个目的:
 
    [Guid("CB2F6723-AB3A-11D2-9C40-00C04FA30A3E"), ComImport]
    public class ThreadManager
    {
 
    }
 
    [Guid("84680D3A-B2C1-46e8-ACC2-DBC0A359159A"), InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
    public interface ICorThreadpool // Cannot list any base interfaces here
    {
        void RegisterWaitForSingleObject();
 
        void UnregisterWait();
 
        void QueueUserWorkItem();
 
        void CreateTimer();
 
        void ChangeTimer();
 
        void DeleteTimer();
 
        void BindIoCompletionCallback();
 
        void CallOrQueueUserWorkItem();
 
        void SetMaxThreads(uint MaxWorkerThreads, uint MaxIOCompletionThreads);
 
        void GetMaxThreads(out uint MaxWorkerThreads, out uint MaxIOCompletionThreads);
 
        void GetAvailableThreads(out uint AvailableWorkerThreads, out uint AvailableIOCompletionThreads);
     }
 
设置线程池中辅助线程的最大数目为50,线程池中异步 I/O 线程的最大数目为2000:
 
ICorThreadpool ct;
uint MaxWorkerThreads;
uint MaxIOCompletionThreads;
ThreadManager threadManager;
 
threadManager = new ThreadManager();
ct = (ICorThreadpool)threadManager;
 
//get max thread count
MaxWorkerThreads = 50;
MaxIOCompletionThreads = 2000;
ct.GetMaxThreads(out MaxWorkerThreads, out MaxIOCompletionThreads);
 
在.NET FrameWork2.0及3.0里面就简单了:
 
int i = 0;
int j = 0;
 
System.Threading.ThreadPool.GetMaxThreads(out i,out j);//25,1000
System.Threading.ThreadPool.SetMaxThreads(50, 2000);
 
注意:
 
不能将辅助线程的数目或 I/O 完成线程的数目设置为小于计算机的处理器数目。
如果公共语言运行库是被承载的,例如被 IIS 或 SQL Server 承载,主机可能会限制或禁止更改线程池大小。
更改线程池中的最大线程数时需谨慎。虽然这类更改可能对您的代码有益,但对您使用的代码库可能会有不利的影响。
将线程池大小设置得太大可能导致性能问题。如果同时执行的线程太多,任务切换开销就成为影响性能的一个主要因素。
标签: C# 线程 .NET
引用地址:本站原创
   站点首页      技术人生      旅途足迹      我要留言      友情链接      关于站长   
[本站统计]
在线人数:2
今日访问:30
总访问量:1469492
Copyright 2006-2022 EasyWeb 1.6 订阅 All Rights Reserved
粤ICP备08028977号-1
www.luoriver.com
Created by WWH in 2006