读书人

小弟我的POCO库学习 - 线程 (二)

发布时间: 2013-02-24 17:58:56 作者: rapoo

我的POCO库学习 -- 线程 (二)

我的POCO库学习 -- 线程 (二)

3. 线程池3.1线程池的基本概念

首先我们来明确线程池的一些概念。

什么是线程池?线程池的好处?

池的英文名:POOL,可以被理解成一个容器。线程池就是放置线程对象的容器。我们知道线程的频繁创建、销毁,是需要耗费一点的系统资源的,如果能够预先创建一系列空线程,在需要使用线程时侯,从线程池里,直接获取IDLE线程,则省去了线程创建的过程,当有频繁的线程出现的时候对性能有比较大的好处,程序执行起来将非常效率。

什么时候推荐使用线程池?

很明显,线程越频繁的被创建和释放,越是能体现出线程池的作用。这时候当然推荐使用线程池。

什么时候不推荐使用线程池?

推荐线程池使用的反面情况喽。

比如长时间运行的线程(线程运行的时间越长,其创建和销毁的开销在其生命周期中比重越低)。

需要永久标识来标识和控制线程,比如想使用专用线程来终止该线程,将其挂起或按名称发现它。因为线程池中的线程都是平等的。

线程池需要具备的元素

线程池要有列表,可以用来管理多个线程对象。 线程池中的线程,具体执行的内容,可自定义。 线程池中的线程,使用完毕后,还能被收回,供下次使用。 线程池要提供获取空闲(IDLE)线程方法。当然这个方法可以被封装在线程池中,成为其内部接口。

3.2 Poco中线程池实现

先看一看Poco中内存池的类图吧。

小弟我的POCO库学习 -  线程 (二)

对于Poco中的线程池来说,设计上分成了两层。第一层为ThreadPool,第二层为PooledThread对象。

第一层中,ThreadPool负责管理线程池,定义如下:
       第一,维护和管理池属性,如增加线程池线程数目,返回空闲线程数目,结束所有线程

第二,把需要运行的业务委托给PooledThread对象,通过接口start(Runnable& target)

         对于PooledThread来说,其线程业务就是不断的检测是否有新的外界业务_pTarget,如果有就运行,没有的话,把自己状态标志位限制,供线程池回收。

3.3 其他 除了上面线程池的主要属性和接口外,Poco中线程池还实现了一些其他特性。如设置线程运行的优先级,实现了一个默认线程的单件等。


读书人网 >编程

热点推荐