006-线程池

背景

  • 无限制的创建线程消耗系统资源
  • 创建线程、回收线程均需要时间

线程池

是在后台执行多个任务的线程集合。
1)最大线程数限制。如果所有线程都繁忙,则额外的任务将放入等待队列中,直到有线程可用时才能够得到处理。
2)最小线程数=创建线程池时应立即启动的数目
3)一旦池中的某个线程完成任务,它将返回到等待线程队列中,等待被再次使用。这种重用使应用程序可以避免为每个任务创建新线程引起的资源和时间消耗。
4)一项工作任务被加入到线程池的队列中,就不能取消该任务,直到该任务完成。

线程池的默认大小:每个可用处理器25个线程。
每个进程都有一个线程池。

为什么要用线程池?

  • 降低系统开销
  • 可以重用资源,使应用程序可以避免为每个任务创建新线程引起的资源和时间消耗。

什么情况下才使用线程池?

  • 后台执行,而且不同线程没有优先级区别
  • 适用于需要多个线程而实际执行时间又不多的场合
  • 没有导致线程长时间被阻塞的任务(对于可能长时间被阻塞的任务,应该创建单独的线程处理,不应该使用线程池),这是因为线程池具有最大线程数限制,大量阻塞的线程池线程可能会阻止任务启动

ThreadPool

ThreadPool类位于System.Threading命名空间下。
ThreadPool提供了对线程池的操作(静态方法),例如:发送工作项、处理异步I/O、设置线程数目等
ThreadPool是一个静态类
托管线程池中的线程为后台线程,即它们的IsBackground属性为true。这意味着在所有的前台线程都已退出后,ThreadPool线程也会自动退出
GetAvailableThreads方法:检索由GetMaxThreads返回的线程池线程的最大数目和当前活动数目之间的差值
GetMaxThreads方法:检索可以同时处于活动状态的线程池请求的数目。所有大于此数目的请求将保持排队状态,直到线程池线程变为可用
GetMinThreads方法:检索线程池在新请求预测中维护的空闲线程数
SetMaxThreads方法:可以同时处于活动状态的线程池的请求数目。所有大于此数目的请求将保持排队状态,直到线程池线程变为可用。
SetMinThreads方法:设置线程池在新请求预测中维护的空闲线程数

QueueUserWorkItem方法功能:

  • 功能:请求线程池处理一个任务或者工作项
  • 运行时线程池会自动为每一个任务创建线程并且在任务释放时释放线程。
  • 语法:带一个WaitCallback委托的参数,这个参数包装了要完成的任务
    Public static bool QueueUserWorkItem( WaitCallback callBack, object state)
    Public static bool QueueUserWorkItem( WaitCallback callBack)
    参数:
    state:包含方法所用数据的对象
    callBack: System.Threading.WaitCallback,它表示要执行的方法
    例如:
    ThreadPool.QueueUserWorkItem(new WaitCallback(方法名),Object参数);
    ThreadPool.QueueUserWorkItem(new WaitCallback(方法名));

你可能感兴趣的:(006-线程池)