Skip to main content
 首页 » 编程设计

C# 自制线程池3

2022年07月19日46findumars

在自制线程池2中讲到了,实现了线程池中的一些不足之处,

今天我在前面的基础上改进了以下内容,

A。Thread.Suspend和Thread.Resume方法在2.0已经被Obslete,因此改用了其它方法来实现

B。原先新建的线程在空闲没有任务时是处于Suspend状态,如果起动了100个线程,完成任务后还是有100个线程存在,现在加入了策略,当线程空闲60s没有被复用(重新获得任务)则该线程自动销毁。

C。更新了同步的方法,比前面的实现好多了,不过肯定还是存在些问题,同步,竞争读写,线程安全这些内容还是比较糊,在今后的实践中慢慢改进吧

D。使线程池可以实例化,这样可以创建多个专用的线程池,这样的好处是,一些任务对执行的时间没有要求,但是希望占用的资源低,我们可以给该线程池设定最大允许一个线程长时间执行这项工作,而另外的线程池是一些短时间的密集型请求,我们可以设定同时400个线程运行,同时将它的线程空闲注销时间设的短一些,以增强响应的能力。

该版本还存在的问题

A.代码不够清楚,多余的代码仅是注释掉了,并没有删除,这样以后看起来可以给自己一些思路,自己是怎么一步一步改过来的,不知道这个算不算是一个坏习惯,我也想把原先不用的代码删除了,但我怕以后自己都看不懂现在演化过来的代码是什么意思,大家有没有这样的情况

B.各个实例化的线程池之间无法共享复用空闲线程,这个是一个很大的问题,但是我还没想到实现的方法,为了这个问题想了一天多了。

C。再将SmartThreadPool中一些实用的功能补充进来。

另外发现

这个是实现的代码

Code

线程安全的哈希表

Code

测试用例1

Code

测试用例2

Code

在做测试二是,我截了两张图,并不能说说什么,供参考

我是在Debug模式下测的,内存占用可能会多些,


本文参考链接:https://www.cnblogs.com/lexus/archive/2008/08/12/1266142.html