么移动中间件线程池并发机制优化改进
2010-01-08黄文伟何加铭曾兴斌
黄文伟,何加铭,曾兴斌
(宁波大学通信技术研究所,浙江宁波315211)
么移动中间件线程池并发机制优化改进
黄文伟,何加铭,曾兴斌
(宁波大学通信技术研究所,浙江宁波315211)
实时性和资源利用率是移动中间件系统的两个重要指标。该文提出了一种改善线程池并发机制的线程池环式组织模型,该模型用以提高领导者/追随者线程模型中领导者选择机制公平性,以提高嵌入式系统资源利用率。实验证明该模型对提高移动中间件系统的资源利用率有较好效果。
中间件,线程管理,线程池,实时性
0 引 言
线程池预先创建一定数量的线程。线程池在还没有任务到来之前,创建一定数量的线程,放入空闲队列中。当任务到来后,缓冲池给此任务分配一个空闲线程,把任务传入此线程中运行。目前,一些著名的大公司都特别看好线程池技术,应用此项技术。ISAP工扩展DLL将它接收的每个请求添加到请求队列[1]。这确保了应用程序能够随着更多的客户端向服务器发出请求而进行缩放。添加到队列的请求按接收到它们的相同顺序得到服务。但是,使用CThreadPool创建的线程池不自动调整自身的大小。SUN公司在研究线程池方面也不示弱,在其推出的消息服务中,广泛使用线程池机制。消息驱动型Bean池也是一个线程池,池中的每个消息驱动型Bean实例都与一个服务器会话关联,而每个服务器会话又与一个线程关联[2]。但是,线程池大小越大,线程数量越多,会影响性能和服务器资源。微软公司和SUN公司的线程池技术各有特色,在实现机制方面也不相同。但是,它们的线程池机制都是和系统资源紧密结合在一起。线程池中线程数量合适时,才可以更好的发挥系统性能。该文在研究并比较线程池两种并发机制的基础上,提出了领导者/跟随者中,用于提高线程公平性的缓释线程组织模型。
1 多线程机制
服务器的多线程并发通信一般用多线程技术来实现。实现多线程并发通信有二种方式:(1)为每个客户分配一个线程;(2)创建一个线程池,由其中的工作线程来为客户服务。
1.1 基于阻塞模式的多线程并发原理
多线程机制允许在程序中并发执行多个指令流,每个指令流都称为一个线程,彼此间互相独立。多个线程的执行是并发的,也就是在逻辑上“同时”,而不管是否是物理上“同时”。阻塞指的是暂停一个线程的执行以等待某个条件的发生[3],所有处于阻塞状态线程的共同特点是:放弃CPU,暂停运行,只有等到导致阻塞的原因消除,才能恢复运行。阻塞通信比较适合于同步通信,并且通信双方是交换小批量的数据信息而不需要长时间等待对方的回应。
1.2 线程池资源调度模型
嵌入式实时中间件通过实现线程池的方式来对处理器资源进行预留管理,线程池是构造嵌入式实时中间件多线程的通用结构。在嵌入式实时中间件核心内部预先分配的一组线程同时处理多个请求,当请求数超过了线程池中的线程数,如果线程池中的线程数已经达到了线程池预设的最大线程数,则将请求放进等待队列直到有空闲线程;如果线程池中的线程数未到预设的最大线程数,则动态增加线程。嵌入式实时中间件利用多线程,可以区分不同优先级的服务[4],支持线程抢先占有,实现可变或长时间运行的复杂对象。服务程序使用线程池策略时,可以定义用来处理客户请求的最大线程数目,为每个客户请求指派一个工作线程。当请求完成时,将该工作线程收回到线程池中,以便重新分配去处理其他请求。如果线程池中的空闲线程太多,应采取相应的回收策略,以降低内存利用率。线程回收策略动态回收空闲线程,如果线程池中的线程过少,则降低了系统的并发性,线程过多,占用大量内存。本文采取在每个线程中附设一个定时器,记录线程空闲时间,并根据系统当时的负载情况,确定线程池的最佳线程数目,根据线程空闲时间从大到小回收线程,使线程池中始终保持最佳线程数目。
嵌入式中间件系统线程池有两种类型[5],一种是无通道的线程池,线程池中的所有线程具有相同的优先级;另一种是有通道的线程池,池中各通道具有不同的优先级,同一通道中各个线程的优先级相同。
2 线程池并发机制分析
嵌入式实时中间件线程池并发机制主要有两种:半同步/半异步线程,领导者/追随者线程模型。两种模型的主要区别在于处理线程的选择不同,半同步/半异步将任务分配给线程池中的线程处理,领导者/追随者线程模型将任务交给监听线程处理(领导者线程)。
2.1 半同步/半异步模型
半同步/半异步线程[6]模型的主要思想:由一个I/O线程负责接收用户请求,并将接收到的请求分派给其他线程,由该线程负责完成用户请求,并将请求结果返回给客户端。其算法描述如下:首先由监听线程监听客户端的任务请求,若接收到任务请求,则将请求分派给线程池中的定时器值最大的工作者线程,任务分派机制采取生产者-消费者模型,如果接收到请求,则马上通知工作者线程来接收;若无任务达到,则阻塞线程池中的工作者线程。可以看出,该模型有两个不足之处:(1)线程切换带来额外开销:当请求从I/O线程分派到工作线程时,需要切换线程上下文;(2)从线程池中选择工作者线程时,应采取一定的算法,选择对应优先级的线程,这必将增加系统对请求的响应时间。为此,提出了领导者/追随者线程模型。
2.2 领导者/追随者线程模型
领导者/追随者线程模型的思想是在系统初始化的时候,随机选择一个线程作为领导者线程,用于监听客户请求。当有请求达到时,领导者线程降级为处理线程,处理用户请求,并从追随者中挑选出一个线程作为领导者,继续监听客户端请求。该算法描述如下:首先,领导者线程等待接收任务请求,若接收到任务请求,则自动降级为处理线程,开始处理用户请求,同时,根据一定算法从线程中挑选一线程成为领导者线程,继续监听用户请求,当处理线程处理完用户请求后,自动加入到线程池中,等待下一次成为领导者线程。可以看出,领导者/追随者线程模型不需要线程切换。
3 环式线程组织模型
为了最大限度得利用线程,避免线程的长时间空闲,应该使线程有相等的机会成为领导者线程,为此,本文设计了一种环式线程组织模型,即将线程池中的线程以链式结构组成一个环,在环上设置一令牌,令牌以一定速率在环上环绕,当领导者向线程池中的追随者发出领导者邀请时,环上的所有线程试图抓住令牌,抓住令牌的线程即成为领导者线程。在此模型中,需要解决3个关键问题:(1)令牌维护,即由谁产生令牌,令牌丢失时如何检测;(2)线程如何入环;(3)当线程被删除时,如何自动构成闭合环。为了兼顾公平性,由领导者产生令牌,当一个线程从跟随者升级为领导者时,自动产生一个令牌。系统在创建线程时,为每个线程分配一个定时器,初值为0,令牌第一次经过该线程时,自动启动定时器,将令牌绕环一圈的时间记为最大定时时间(MTT),当某个线程的定时器时间大于MTT时,则判定令牌丢失,立即通知领导者线程重新生成令牌,由于令牌按时间顺序到达各个线程,因此,线程中的定时器时间各不相同,不会产生重复申请令牌的动作。当任务数大于线程池中的线程数时,应自动创建线程,并将线程放入线程池中,如何将线程入环呢(将线程插入环中哪个位置)。由于刚创建线程的定时器时间被初始化为0,为了保持环中线程时间的按顺序递增性,应将线程加入到定时器时间最小的线程后面(成为该线程的后继线程),记环的结构如图1所示,若将新创建的s8加入环,并假设插入到s4后面,只需修改s4的后继指针,s4->next->=s8,s8->next=s5。欲将s4删除,只需要修改s3和s4的指针,即s4->next=NULL,s3->next=s5即可。由于环中的线程是以链式结构组织,所以,不管是加入还是删除,只需一次查找,所产生的时延几乎可以忽略。
图1 线程池环式组织结构
4 实验仿真
表1 两种线程组织模式利用率对比
5 结束语
本文首先分析了传统线程调度模型,就其中的缺陷提出了线程池调度模型,并加以详述。为了提高系统资源的利用率,文本采用了定时器机制,及时回收系统的空闲资源。接着介绍线程池并发的两种机制,并且针对处理器资源管理现有的半同步/半异步模型的研究现状及缺陷提出了领导者-追随者模型,设计了环式线程组织方式。该模型不仅可以嵌入式系统的响应实时性,而且能有效提高资源利用率。
图2 仿真结果
[1]Visual C++概念添加功能线程池.http://msdn.microsoft.com/library/chs/default.asp?url=/library/CHS/vccore/htm l/vcconatlserverserverthreadpooldefined.asp.
[2]使用消息驱动型Bean.http://www.huihoo.com/middleware/application-server/sunone/app?-ejb/demdb.htm l#33083.
[3]刘云声,王振宇,段爱群.基于阻塞模式的多线程并发通信技术研究[J].计算机工程与科学,2008,29(2):58-61.
[4]郭长国.基于优先级的实时中间件的研究与实现[D].北京:国防科技大学,2002.
[5]王振宇.嵌入式实时中间件资源管理策略的研究及实现[D].武汉:华中科技大学,2007.
[6]山海丰.基于CORBA/e的嵌入式中间件的研究[D].哈尔滨:哈尔滨工程大学,2008.
The Optimization and Im provement of Concurrence Mechanism in Thread-poolwith M obile M iddleware HUANGWen-wei,HE Jia-ming,ZENG Xing-bin
(Instituteof Communication,Ningbo University,Ningbo Zhejiang315211,China)
The real-timeand theutility of resource are the two important index ofmobilemiddleware system.This paper puts forward a ringmodel to form threads in the threadpool in order to improve the intercurrencemechanism of threadpool.Themodel aim is the justice in terms of selecting the leading thread in the leading/following thread model,so as to increase the utility of resource in the embedded system.The test demonstrates that thismodel indeed hasgood effect in the aspect of enhancing the utility of resource in themobilemiddleware system.
middleware;thread-management;threadpool;real-time
TP391
A
1001-9146(2010)05-0097-04
2010-07-20
科技部公共服务平台创新基金资助项目(C26243314159),浙江省科技计划项目资助项目(C31107),国际科技合作项目资助项目(DFA12120)
黄文伟(1985-),男,浙江温州人,在读研究生,数字无线.