博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C# 线程池ThreadPool的用法简析
阅读量:6255 次
发布时间:2019-06-22

本文共 1153 字,大约阅读时间需要 3 分钟。

https://blog.csdn.net/smooth_tailor/article/details/52460566

 

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

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秒内即可执行完毕,效率、性能都很好。

你可能感兴趣的文章
getResourceAsStream和getResource的用法及Demo实例
查看>>
[C#] string 与 String,大 S 与小 S 之间没有什么不可言说的秘密
查看>>
javascript 自定义错误处理
查看>>
POJ 3278 Catch That Cow(BFS,板子题)
查看>>
Ubuntu下U盘只读文件系统,图标上锁,提示无法修改
查看>>
TCP/IP具体解释学习笔记--TCP的超时与重传
查看>>
C#设计模式之十一享元模式(Flyweight Pattern)【结构型】
查看>>
基于zookeeper简单实现分布式锁
查看>>
Makefile:160: recipe for target 'all' failed (Ubuntu 16.06 + Opencv3.2)解决办法
查看>>
a WebSite for MapXtreme2005 Crack
查看>>
几种函数调用方式
查看>>
【MySQL】MySQL 常用语法之锁表与解锁表
查看>>
【142】阿蛮歌霸使用技巧
查看>>
HTTP 请求报文 响应报文
查看>>
[转载] 程序员必看:请不要做浮躁的人 24法则
查看>>
JavaWeb_JavaEE_命名规则
查看>>
HDU 4010 Query on The Trees
查看>>
[PAL规范]SAP HANA PAL 数据处理四分位间距检测Inter-quartile Range Test编程规范IQRTEST...
查看>>
[HDU 1317]XYZZY[SPFA变形][最长路]
查看>>
Skip list--reference wiki
查看>>