一种采用多线程处理业务应用的方法
【技术领域】
[0001]本发明涉及信息技术中采用多线程业务处理过程的调度技术,尤其涉及一种采用多线程处理业务应用的方法,属于计算机通信领域。
【背景技术】
[0002]多线程,是指从软件或者硬件上实现多个线程并发执行的技术。在一个程序中,这些独立运行的程序片段叫做“线程”,利用它编程的概念就叫做“多线程处理”。
[0003]在工程应用中,多线程技术常被用来提高软件系统的运行效率,虽然随着硬件技术的进步,多处理器,大内存的硬件迅速普及,但是软件系统的要处理的业务也越来越多变复杂,以及被处理数据极度膨胀,如何充分的利用硬件、系统资源在高效稳定的前提下的处理复杂多变的业务成为一个热门的课题。
[0004]但是采用多线程技术会面临以下几个方面的问题,如果处理不好,会造成多线程处理业务的效率大幅下降,甚至有时候会低于单线程处理业务的情况:(I)在多线程环境下,公共资源或代码需要进行同步和互斥,以保证系统运行安全,通常会采用临界区、互斥体或者信号量等方式进行保护,这时候会对有较大开销,如果处理不好,多线程处理性能会降低很多;(2)在实际系统应用中,多线程处理业务在有些情况下某类业务处理需求量会大于其他类型的业务处理需求,这时候就要动态的根据实际情况对资源进行再分配,对资源需求大的业务分配更多的资源,以获取整个系统的运行效率最大化;(3)在多线程环境下,有时候需要在线程之间进行大量的消息传递,会造成过多数据拷贝,耗费较多系统资源,降低整个系统的业务处理效率。
[0005]为此,如何提供一种采用多线程处理业务应用的方法,是本领域亟需解决的技术问题,也是本发明研宄的目的所在。
【发明内容】
[0006]为解决上述问题,本发明提供一种采用多线程处理业务应用的方法:线程间通过无锁队列,异步消息传送数据,减少同步和互斥锁的使用;在异步消息通过内存引用计数的方法,大幅度减少异步消息传递时候的内存拷贝;运行期动态的注册新的业务处理类型;周期性的回收空闲资源,将资源投入繁忙的业务,提高了系统整体的业务处理能力。
[0007]一种采用多线程处理业务应用的方法,包括以下步骤:
(1)程序在主线程中预先创建并激活业务调度线程;
(2)业务调度线程激活后,创建激活循环业务驱动线程;循环业务驱动线程的作用是根据注册的循环业务驱动业务,周期性的驱动业务调度线程执行指定业务;
(3)循环业务驱动线程启动成功后,首先注册一个调度状态检测的任务,该任务周期性地调度状态检测消息到业务调度线程,检测业务调度线程当前的运行信息;
(4)业务调度线程接受业务处理类型注册消息,根据注册的消息,为该业务处理类型启动默认或指定的处理线程数量; (5)为每个业务处理线程分配一个无锁队列;
(6)业务调度线程接收到已注册的业务处理消息,业务调度线程会根据该类型业务的处理线程负载情况选择不繁忙的业务处理线程;
(7)业务调度线程将业务处理消息中的数据区引用计数置为非零,插入选择的业务处理线程的无锁队列中,业务处理线程会从自己的无锁队列中获取业务处理消息,进行处理;
(8)当业务处理完毕,业务处理线程向业务调度线程发送处理完毕返回消息,业务处理线程将业务处理消息中的数据区引用计数置零,以便于该数据区被业务调度线程重新使用;
(9)业务调度线程收到处理完毕返回消息,将该消息反馈给外部消息源。
[0008]进一步地,所述的循环业务驱动线程用于根据注册的循环业务驱动业务,周期性的驱动业务调度线程执行指定业务。
[0009]进一步地,所述的步骤(4)中,如果业务处理类型超过业务类型数最大阈值,则向业务类型注册消息源返回注册失败;如果业务处理类型注册消息中的业务处理方法加载失败,则向业务类型注册消息源返回注册失败。
[0010]进一步地,如果该业务为定时循环业务,则同时在循环业务驱动线程注册循环业务驱动任务,该任务会根据业务处理类型注册消息中的时间间隔,周期性的驱动业务调度线程执行指定业务。
[0011]进一步地,所述的步骤(6)中,如果该类型的业务处理线程都处于繁忙状态,即无锁队列的内的业务处理消息数大于设定的阈值,则为该类型的业务处理增加新的处理线程;如果系统的实际情况无法再增加新的处理线程给该类业务,则将该业务处理消息放入业务调度线程维护的待处理队列;当待处理队列的消息数量大于设定的繁忙阈值的时候,业务调度线程使用约定好的外部接口向业务处理消息的发送源反馈业务处理繁忙的信息。
[0012]进一步地,所述的业务调度线程会周期性的收到调度状态检测消息,根据当前各个类型的业务处理实际情况,会将空闲时间较长的的业务类型处理线程减少,最少一类业务保留一个空闲业务处理线程。
[0013]本发明的有益效果是:本发明提供一种多线程处理业务的调度方法,预先创建业务调度线程和循环业务驱动线程。然后等待业务类型的注册,在注册成功后,即可处理注册相关业务;并且通过集成无锁队列,引用计数的优化技术,能够在确保系统安全、稳定运行的前提下,根据当前系统的处理能力,控制线程的并发数量,减少不必要的内存拷贝,减少系统锁的使用,并且运行期间可以增加新的业务处理类型,提高系统的业务扩展性,提高系统运行效率及系统对资源使用的伸缩性,缩短业务系统的开发周期。
【附图说明】
[0014]图1为本发明的应用模型图。
[0015]图2为本发明的应用模型操作过程图。
[0016]图3为业务调度线程运行流程图。
[0017]图4为循环业务驱动线程运行流程图。
[0018]图5为通用消息头结构体示例性伪代码。
[0019]图6为业务处理类型注册消息结构体伪代码。
[0020]图7为业务处理类型注册消息过程图。
[0021]图8为本发明的调度检测消息流程图。
[0022]图9为业务处理消息结构体和业务处理结果消息结构体伪代码。
[0023]图10为本发明的业务处理结果消息流程图。
【具体实施方式】
[0024]图1为本发明的应用模型,本发明首先在主线程中创建线程,其中包括业务调度线程和循环业务驱动线程;业务调度线程接收外部消息源TCP收发模块发送的业务处理消息或业务类型注册消息,返回业务处理消息或调度性能消息给TCP收发模块;业务调度线程发送循环业务注册消息给循环业务驱动线程,循环业务驱动线程根据业务处理结果将业务处理消息返回给业务调度线程;业务调度线程创建并激活循环业务驱动线程,对不同类型的多个处理线程进行调度,如业务类型1-N。
[0025]具体过程如图2所示:开始状态下,程序主线程启动业务调度线程和循环业务驱动线程,判断启动是否成功,若启动成功,则启动TCP收发模块,作为外部消息源,随后主线程进入等待退出状态,否则结束;业务调度线程启动后,初始化自身的任务待处理队列,设置待处理队列的最大消息阈值为1000 ;循环业务驱动线程启动后,首先注册一个调度状态监测的任务,设置周期为I分钟;业务调度线程和循环业务驱动线程启动成功后,再启动TCP通讯模块,做为外部业务处理请求源;通过上述