说到多线程,一直是编程中的一个难题,关键问题就是很难调试。每个线程的执行时间是由CPU随机分配的,你无法预料一个确定的结果。想象一下有数万个相同的任务需要执行,这里我们打个比方,比如你有一个代理列表文本文件 一行一个代理,格式IP:PORT,有1万行,你也许接触过一些代理验证软件,在软件里你可以很方便的设置并行线程数,然后点开始,就会以非常高的效率,以多线程的方式对你所导入的代理进行测试,直到最后一个代理验证完毕(每一时刻,有固定数量的线程在运行),我所说的就是这种模型。
这个模型是SPIDER程序的基础,网络蜘蛛(数据挖掘)程序就是一种基于深度的并行线程池,许多专业的营销类软件也是使用这种线程池模型来进行群发。
本人基于DELPHI的TThread封装了更实用,更结构化的TThreadTask线程类。并且写了一个线程池类TThreadPool 它是 TThreadTask 的容器,其中运用了面向对象的方法,使用了继承和多态,实现了一个可设置并发任务数的线程池。继承这些基类你可以编写任意自定义的基于这种模型的应用,让你的程序具有强大而安全的多线程处理能力!本人还额外封装了一个 THTTPtask 类,该类是基于INDY进一步封装而成,并使用了一个第3方的压缩处理库,使 THTTPtask 如同浏览器那样,完全支持 GZIP,使你编写 HTTP 多线程程序变的非常容易!
本DEMO是一个简单的代理验证程序,其中 ThreadTask.pas, ThreadPool.Pas, HTTPtask.pas 分别封装了上面所说的3个类。使用方法:
1> 新建一个单元从THTTPtask继承编写你自己的HTTP线程类,如DEMO中的 MyThreadTask.pas 2> 新建一个单元从TThreadPool继承编写你自己的线程池类,如DEMO中的 MyThreadPool.pas(只需要覆盖基类中的一个SetThread方法就可以了!) 3> 线程池任务列表的装载,以及线程池的控制(开始,暂停,继续,停止),请参看DEMO中Main.pas的代码。 |