码迷,mamicode.com
首页 > 编程语言 > 详细

应用CLR的线程池

时间:2014-11-04 23:59:17      阅读:382      评论:0      收藏:0      [点我收藏+]

标签:style   blog   http   io   color   ar   使用   for   sp   

大家都知道这个线程的建立和销毁都需要很大的性能开销,当有比较多且不同的任务需要完成时,可以考虑使用线程池来管理这些线程。在以windows NT为内核的操作系统上每个进程都包含一个线程池,在线程池中存在许多可以被随时使用的线程,当应用程序使用时,可以从线程池中直接取出一个已经存在的线程,当某个线程使用完成后,不会立即销毁,而是放入线程池中等待下一次的使用。

在C#中,通过System .Threading.ThreadPool提供了以下的常用方法和说明。

方法名称 说明
BindHandle 将操作系统句柄绑定到ThreadPool。
GetAvailableThreads 检索由GetMaxThreads方法返回的最大线程数和当前活动线程数之间的差值。
GetMaxThreads 检索同时处于活动状态的线程池请求的数目,所有大于此数目的请求将保持排队状态,直到线程池线程变为可用。
GetMinThreads 检索线程池在新请求预测中维护的空闲线程数。    
QueueUserWorkItem 将方法排入队列以便执行,此方法在有线程池线程变得可用时执行。
RegisterWaitForSingleObject 注册正在等待WaitHandle的委托。
SetMaxThreads 设置可以同时处于活动状态的线程池的请求数目。所有大于此数目的请求将保持排队状态,直到线程池线程变得可用。
SetMinThreads 设置线程池在新请求预测中维护的空闲线程数。
UnsafeQueueUserWorkItem 注册一个等待WaitHandle的委托。
UnRegisterWaitForSingleObject 将指定的委托排队到线程池。

举个例子:

 static void Main(string[] args)
        {
            int intWorkThreads;
            int intCompletionPortThreads;
            ThreadPool.GetMaxThreads(out intWorkThreads, out intCompletionPortThreads);
            Console.WriteLine("最大工作线程数:{0},最大I/O线程数:{1}",intWorkThreads,intCompletionPortThreads);
            //获取最大线程数的信息。
            for (int i = 0; i < 3; i++)
            {
                ThreadPool.QueueUserWorkItem(TestThreadPool);//在线程池中申请使用线程。
            }
            Console.ReadLine();
        }
        static void TestThreadPool(object obj)
        {
            for (int i = 0; i < 3; i++)
            {
                //Thread.CurrentThread.ManagedThreadId获取正在运行的线程的标识。
                Console.WriteLine("线程池中,正在运行的线程的唯一标识为{0}",Thread.CurrentThread.ManagedThreadId);
            }
            Thread.Sleep(100);
        }

bubuko.com,布布扣

线程池中运行的线程都是后台线程,就是线程池中的所有线程的IsBackground属性都被设置为True,后台线程不会影响应用程序的结束,而前台的线程对应用程序的结束会有很大影响,因为应用程序的退出必须等待所有的前台线程结束。

应用CLR的线程池

标签:style   blog   http   io   color   ar   使用   for   sp   

原文地址:http://www.cnblogs.com/jason-davis/p/4075066.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!