• C# 线程池ThreadPool的用法简析


    什么是线程池?为什么要用线程池?怎么用线程池?

    1. 什么是线程池?

            .NET Framework的ThreadPool类提供一个线程池,该线程池可用于执行任务、发送工作项、处理异步 I/O、代表其他线程等待以及处理计时器。那么什么是线程池?线程池其实就是一个存放线程对象的“池子(pool)”,他提供了一些基本方法,如:设置pool中最小/最大线程数量、把要执行的方法排入队列等等。ThreadPool是一个静态类,因此可以直接使用,不用创建对象。

    2. 为什么要用线程池?好处是什么?

            微软官网说法如下:许多应用程序创建大量处于睡眠状态,等待事件发生的线程。还有许多线程可能会进入休眠状态,这些线程只是为了定期唤醒以轮询更改或更新的状态信息。 线程池,使您可以通过由系统管理的工作线程池来更有效地使用线程。

            说得简单一点,每新建一个线程都需要占用内存空间和其他资源,而新建了那么多线程,有很多在休眠,或者在等待资源释放;又有许多线程只是周期性的做一些小工作,如刷新数据等等,太浪费了,划不来,实际编程中大量线程突发,然后在短时间内结束的情况很少见。于是,就提出了线程池的概念。线程池中的线程执行完指定的方法后并不会自动消除,而是以挂起状态返回线程池,如果应用程序再次向线程池发出请求,那么处以挂起状态的线程就会被激活并执行任务,而不会创建新线程,这就节约了很多开销。只有当线程数达到最大线程数量,系统才会自动销毁线程。因此,使用线程池可以避免大量的创建和销毁的开支,具有更好的性能和稳定性,其次,开发人员把线程交给系统管理,可以集中精力处理其他任务。

    3. 怎么使用线程池?

    其实线程池使用起来很简单,如下

    a.设置线程池最大最小:

    ThreadPool.SetMaxThreads (int workerThreads,int completionPortThreads)

    设置可以同时处于活动状态的线程池的请求数目。所有大于此数目的请求将保持排队状态,直到线程池线程变为可用。还可以设置最小线程数。

    b.将任务添加进线程池:

    ThreadPool.QueueUserWorkItem(new WaitCallback(方法名));

    ThreadPool.QueueUserWorkItem(new WaitCallback(方法名), 参数);

    举个小例子,线程池中最多5个线程,执行一个方法60次,算5年总工资,如下:


    如果不采用线程池,恐怕要开60线程异步执行Run()方法,空间资源之浪费,可见一斑。而现在我们最多用了5个线程,1秒内即可执行完毕,效率、性能都很好。

  • 相关阅读:
    Nginx学习---Nginx的详解_【all】
    Nginx学习---企业级nginx环境搭建
    企业的批量分发的管理方案
    全网数据实时备份方案[inotify,sersync]
    搭建企业级全网数据定时备份方案[cron + rsync]2
    搭建企业级全网数据定时备份方案[cron + rsync]
    SSH连接不上
    ACC起来后,usb检测不到
    常用命令和配置文件位置
    Linux系统的信号详解
  • 原文地址:https://www.cnblogs.com/ybqjymy/p/14281717.html
Copyright © 2020-2023  润新知