• 应用CLR的线程池


    大家都知道这个线程的建立和销毁都需要很大的性能开销,当有比较多且不同的任务需要完成时,可以考虑使用线程池来管理这些线程。在以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);
            }

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

  • 相关阅读:
    asp+access win2008php+mysql /dedecms 配置总结
    js获取页面元素位置函数(跨浏览器)
    Extjs 4 小记
    小总结
    新浪微博 page应用 自适应高度设定 终于找到解决方法
    常用的三层架构设计(转载)
    http://www.jeasyui.com/
    http://j-ui.com/
    日期编辑器MooTools DatePicker
    android布局
  • 原文地址:https://www.cnblogs.com/jason-davis/p/4075066.html
Copyright © 2020-2023  润新知