线程数目可伸缩的多任务队列调度系统及其实现方法

文档序号:6512198阅读:133来源:国知局
线程数目可伸缩的多任务队列调度系统及其实现方法
【专利摘要】本发明公开了一种线程数目可伸缩的多任务队列调度系统及其实现方法,该系统主要由任务派发者、工作线程池和任务队列构成;其中,所述的任务派发者为一个独立的进程或线程;所述的工作线程池创建有一个以上的工作线程,且工作线程不与任务队列直接相关联;所述的任务队列是根据任务类型创建的任务排队序列;所述的任务派发者根据任务队列情况决定是否分配新的工作线程。本发明系统结构组成及其逻辑设计合理、可行、易实现;不需要为每个任务类型创建一个独立的工作进程或线程,可以极大的有效的节省系统资源。
【专利说明】线程数目可伸缩的多任务队列调度系统及其实现方法
【技术领域】
[0001]本发明属于计算机工程【技术领域】,涉及了一种基于工作线程池而设计的多任务队列调度系统及其实现方法。
【背景技术】
[0002]RTOS (Realtime operation system,实时操作系统)是嵌入式应用软件的基础和开发平台,是一个可靠性和可信性很高的实时内核。RTOS将CPU时间、中断、I/O、定时器等资源都包装起来,留给用户一个标准的API (Application Program Interface,应用程序接口 ),并根据各个任务的优先级,合理地在不同任务之间分配CPU时间。
[0003]RTOS通常设置于嵌入式系统中实时地完成各种功能,这些嵌入式系统通常具有实时性很好、系统体积小、资源有限和没有图形界面等特点。典型的RTOS有:Vxworks、pS0S、Nucleus、eCos、uC/OS-1I 等。
[0004]⑶I (Graphic User Interface,图形用户接口)系统以图形的方式实现人机交互,调度机制是GUI系统的核心,管理GUI系统的驱动和各个应用程序,实现各个应用程序对CPU资源的共享使用。高性能的GUI调度机制不仅占用很少的CPU资源,而且能够快速响应用户请求。
[0005]上述GUI调度机制不是指操作系统内核层面的任务调度,而是指具有界面显示的各个应用程序之间的调度机制。例如,开机便进入待机模块,摘机就进入拨号模块,不摘机按功能键就进入功能菜单模块,从功能菜单中选择照相机从而进入拍照模块,此时如果有来电,则进入语音通话模块,在通话完毕挂机后又返回拍照模块。
[0006]当前典型的⑶I系统为Windows操作系统的⑶I,在嵌入式系统中比较常见的⑶I系统为Qtopia和Mini⑶I。下面分别介绍上述三个⑶I系统。
[0007]1.Windows CE (Control System,控制系统)
Windows CE是嵌入式操作系统,提供完整的⑶I界面和调度系统,与PC版的Windows在界面上几乎完全一致。
[0008]2.Mini⑶I
MiniGUI是针对嵌入式设备的、跨操作系统的图形界面支持系统,属于一种“嵌入式图形中间件”软件产品。在近八年的发展历程中,Mini⑶I已经从一个仅仅是为了在Linux显示中文而开发的小技术,发展成为一个跨操作系统的、完善的嵌入式图形用户界面支持系统。Mini⑶I最理想地平台是Linux操作系统,也可以支持uCOSII等RT0S。
[0009]3.Qtopia
Qtopia由Qt/Embedded发展而来,是面向嵌入式系统的Qt版本。因为Qt是KDE等项目使用的⑶I支持库,因此有许多基于Qt的X Window程序可以非常方便地移植到Qtopia版本上。Qtopia是一个C++函数库,它提供的控件集风格沿用了 PC风格。
[0010]上述现有技术中的GUI系统的缺点为:上述GUI系统的调度完全使用内核提供的线程调度,每个应用程序不管是否需要界面显示都有独立的线程来接收操作系统的调度。基于底层强大的操作系统做支撑,各个应用程序的设计虽然具有极大的灵活性,但是,各个应用程序对底层操作系统的依赖太重,通常需要平台化的操作系统的支持,比如Windows或者Linux操作系统。
[0011]上述⑶I系统的资源开销巨大,不能适应功能明确的小型嵌入式系统的应用需求,一般不支持RTOS作为底层的操作系统。另外,对于嵌入式应用也不需要复杂的GUI系统,过于复杂的GUI事实上会降低用户操作的简便性。
[0012]上述GUI系统的各个应用程序之间是一种松散关系,导致需要实现多个应用程序时可能会出现如下的两个问题:
1、如果将要实现的多个应用程序作为不同的应用程序功能模块,则要求这些应用程序功能模块之间不要有太多的相互联系。一旦这些应用程序功能模块之间有复杂的联系,这些应用程序功能模块对系统的资源和设备(比如Camera、内存)的需求必然会产生冲突,实现起来很难维护;
2、如果将要实现的多个应用程序作为一个单独应用程序功能模块,则会给多个程序员的协同开发带来巨大的维护难度,将会导致多个程序员去开发同一个模块或者一个程序员完成一个规模宏大的模块。

【发明内容】

[0013]本发明的目的在于针对现有技术的不足,提供了一种基于操作系统内置的工作线程池以及开发语言提供的队列数据结构而设计的线程数目可伸缩的多任务队列调度系统及其实现方法。该系统特别适用于拥有大量不同类型任务,且所有任务都需要能够即时并有序处理的情景。本系统的特点在于其拥有良好的进程或线程数可伸缩性;因为其不需要为每个任务类型创建一个独立的工作进程或线程,所以它可以极大的节省系统资源。
[0014]为了实现上述目的,本发明采取了以下技术方案:
一种线程数目可伸缩的多任务队列调度系统,主要由任务派发者、工作线程池和任务队列构成;其中,所述的任务派发者为一个独立的进程或线程;所述的工作线程池创建有一个以上的工作线程,且工作线程不与任务队列直接相关联;所述的任务队列是根据任务类型创建的任务排队序列;所述的任务派发者根据任务队列情况决定是否分配新的工作线程。
[0015]上述的线程数目可伸缩的多任务队列调度系统的实现方法,包括系统初始化设计、任务派发者的逻辑设计和工作线程的逻辑设计;其特征在于,所述的系统初始化设计包括:
(1)为每种任务类型创建一个对应的任务队列,并分别记为TQl,TQ2,…,TQn;
(2)创建一个或者两个以上任务派发者,接收任务并根据任务类型派发到相应的任务队列中;
(3)初始化工作线程池,空闲状态的工作线程进入睡眠状态;
所述的任务派发者的逻辑设计包括:
(1)任务派发者接收到某一类型的任务Ti时,找到其对应的任务队列TQi,并判断该任务队列的待执行任务是否为空;
(2)如果该任务队列TQi的待执行任务为空,则将任务Ti放入到该任务队列TQi中,并执行以下操作:
a.在工作线程池中查找空闲状态的工作线程,如果工作线程池中无空闲状态的工作线程,则创建一个新的工作线程,并将其加入到工作线程池中;
b.用找到的空闲状态的工作线程或是新建的工作线程来执行任务Ti;
(3)如果该任务队列TQi的待执行任务不为空,则将任务Ti放在任务队列TQi的末尾,等待任务执行;
所述的工作线程的逻辑设计包括:
(1)当工作线程被分配一个任务Ti时,其执行该任务;
(2)当工作线程执行完一个任务Ti后,其查找Ti对应的队列TQi,然后执行以下操作:
a.将任务Ti从TQi中移除;
b.如果TQi不为空,继续执行队头的任务;
c.如果TQi为空,终止执行,工作线程回归工作线程池。
[0016]在多任务队列调度系统的实现方法中,所述的任务派发者为一个独立的进程或线程。
[0017]在多任务队列调度系统的实现方法中,所述的工作线程池创建有一个以上的工作线程,且工作线程不与任务队列直接相关联。
[0018]在多任务队列调度系统的实现方法中,所述的待执行任务包括未执行任务和正在执行但未完成的任务。
[0019]在多任务队列调度系统的实现方法中,所述的工作线程回归工作线程池后,工作线程池将销毁该工作线程或是将该工作线程分配给其他任务队列执行任务。
[0020]本发明的优点:
1.在本发明中,创建有多个任务队列,这样该系统就可以适用于拥有大量不同类型任务且所有任务都需要能够即时并有序处理的情景。
[0021]2.在本发明中,任务队列与工作线程池的工作线程没有直接关联,因此,不需要为每个任务类型创建一个独立的工作进程或线程,可以极大的有效的节省系统资源。
[0022]3.在本发明中,工作线程池内的工作线程可以根据实际情况创建或销毁,这样使得本系统拥有良好的进程或线程数可伸缩性。
[0023]4.本发明系统结构组成及其逻辑设计合理、可行、易实现。
【专利附图】

【附图说明】
[0024]图1是本发明中的系统组成结构示意图。
[0025]图2是本发明中的任务派发者的逻辑设计流程图。
[0026]图3是本发明中的工作线程的逻辑设计流程图。
【具体实施方式】
[0027]下面结合附图和实施例对本发明进一步说明。
[0028]实施例:
如图1所示,一种线程数目可伸缩的多任务队列调度系统,主要由任务派发者、工作线程池和任务队列构成;其中,所述的任务派发者为一个独立的进程或线程;所述的工作线程池创建有一个以上的工作线程,且工作线程不与任务队列直接相关联;所述的任务队列是根据任务类型创建的任务排队序列;所述的任务派发者根据任务队列情况决定是否分配新的工作线程。
[0029]如图2、3所示,上述的线程数目可伸缩的多任务队列调度系统的实现方法,包括系统初始化设计、任务派发者的逻辑设计和工作线程的逻辑设计;其中,
所述的系统初始化设计包括:
(1)为每种任务类型创建一个对应的任务队列,并分别记为TQl,TQ2,…,TQn;
(2)创建一个或者两个以上任务派发者,接收任务并根据任务类型派发到相应的任务队列中;
(3)初始化工作线程池,空闲状态的工作线程进入睡眠状态;
所述的任务派发者的逻辑设计包括:
(1)任务派发者接收到某一类型的任务Ti时,找到其对应的任务队列TQi,并判断该任务队列的待执行任务是否为空;所述的待执行任务包括未执行任务和正在执行但未完成的任务;
(2)如果该任务队列TQi的待执行任务为空,则将任务Ti放入到该任务队列TQi中,并执行以下操作:
a.在工作线程池中查找空闲状态的工作线程,如果工作线程池中无空闲状态的工作线程,则创建一个新的工作线程,并将其加入到工作线程池中;
b.用找到的空闲状态的工作线程或是新建的工作线程来执行任务Ti;
(3)如果该任务队列TQi的 待执行任务不为空,则将任务Ti放在任务队列TQi的末尾,等待任务执行;
所述的工作线程的逻辑设计包括:
(1)当工作线程被分配一个任务Ti时,其执行该任务;
(2)当工作线程执行完一个任务Ti后,其查找Ti对应的队列TQi,然后执行以下操作:
a.将任务Ti从TQi中移除;
b.如果TQi不为空,继续执行队头的任务;
c.如果TQi为空,终止执行,工作线程回归工作线程池。所述的工作线程回归工作线程池后,工作线程池将销毁该工作线程或是将该工作线程分配给其他任务队列执行任务。
【权利要求】
1.一种线程数目可伸缩的多任务队列调度系统,主要由任务派发者、工作线程池和任务队列构成;其特征在于:所述的任务派发者为一个独立的进程或线程;所述的工作线程池创建有一个以上的工作线程,且工作线程不与任务队列直接相关联;所述的任务队列是根据任务类型创建的任务排队序列;所述的任务派发者根据任务队列情况决定是否分配新的工作线程。
2.一种如权利要求1所述的线程数目可伸缩的多任务队列调度系统的实现方法,包括系统初始化设计、任务派发者的逻辑设计和工作线程的逻辑设计;其特征在于,所述的系统初始化设计包括: (1)为每种任务类型创建一个对应的任务队列,并分别记为TQl,TQ2,…,TQn; (2)创建一个或者两个以上任务派发者,接收任务并根据任务类型派发到相应的任务队列中; (3)初始化工作线程池,空闲状态的工作线程进入睡眠状态; 所述的任务派发者的逻辑设计包括: (1)任务派发者接收到某一类型的任务Ti时,找到其对应的任务队列TQi,并判断该任务队列的待执行任务是否为空; (2)如果该任务队列TQi的待执行任务为空,则将任务Ti放入到该任务队列TQi中,并执行以下操作: a.在工作线程池中查找空闲状态的工作线程,如果工作线程池中无空闲状态的工作线程,则创建一个新的工作线程,并将其加入到工作线程池中; b.用找到的空闲状态的工作线程或是新建的工作线程来执行任务Ti; (3)如果该任务队列TQi的待执行任务不为空,则将任务Ti放在任务队列TQi的末尾,等待任务执行; 所述的工作线程的逻辑设计包括: (1)当工作线程被分配一个任务Ti时,其执行该任务; (2)当工作线程执行完一个任务Ti后,其查找Ti对应的队列TQi,然后执行以下操作: a.将任务Ti从TQi中移除; b.如果TQi不为空,继续执行队头的任务; c.如果TQi为空,终止执行,工作线程回归工作线程池。
3.根据权利要求2所述的多任务队列调度系统的实现方法,其特征在于:所述的任务派发者为一个独立的进程或线程。
4.根据权利要求2所述的多任务队列调度系统的实现方法,其特征在于:所述的工作线程池创建有一个以上的工作线程,且工作线程不与任务队列直接相关联。
5.根据权利要求2-4任一所述的多任务队列调度系统的实现方法,其特征在于:所述的待执行任务包括未执行任务和正在执行但未完成的任务。
6. 根据权利要求5所述的多任务队列调度系统的实现方法,其特征在于:所述的工作线程回归工作线程池后,工作线程池将销毁该工作线程或是将该工作线程分配给其他任务队列执行任务。
【文档编号】G06F9/46GK103473129SQ201310428355
【公开日】2013年12月25日 申请日期:2013年9月18日 优先权日:2013年9月18日
【发明者】覃祖茂, 刘为, 袁增伟, 杜怡曼, 何佳, 李东娥, 刘晓, 黄益农, 黄华峰 申请人:柳州市博源环科科技有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1