一种多线程管理方法及架构.pdf

上传人:a2 文档编号:4755010 上传时间:2018-11-07 格式:PDF 页数:18 大小:628.90KB
返回 下载 相关 举报
摘要
申请专利号:

CN201110391566.8

申请日:

2011.11.30

公开号:

CN103136047A

公开日:

2013.06.05

当前法律状态:

授权

有效性:

有权

法律详情:

授权|||实质审查的生效IPC(主分类):G06F 9/48申请日:20111130|||公开

IPC分类号:

G06F9/48

主分类号:

G06F9/48

申请人:

大唐联诚信息系统技术有限公司

发明人:

韩正超; 王海涛; 范大庆

地址:

100191 北京市海淀区学院路40号

优先权:

专利代理机构:

北京集佳知识产权代理有限公司 11227

代理人:

逯长明

PDF下载: PDF下载
内容摘要

本发明公开了一种多线程管理方法及架构。该方法适用于由操作系统控制多个线程的架构中,其中,多个线程包括调度线程和处理线程;该方法包括:当前被执行的调度线程获得当前被执行纤程所发送的调度消息,该调度消息携带有目的标识;判断该目的标识是否为自身内部纤程的标识,如果是,则根据该调度消息,从当前被执行纤程切换到具有目的标识的纤程,以实现线程内部纤程的切换;否则,将该调度消息发送至该目的标识对应的线程,并且在当前被执行纤程执行完毕后,释放相应CPU资源,并保存自身的堆栈信息,以此实现线程间的切换。通过利用本方案,操作系统所控制的多个线程之间的切换次数减少,切换开销大大降低。

权利要求书

权利要求书一种多线程管理方法,其特征在于,适用于由操作系统控制多个线程的架构中,其中,多个线程包括调度线程和处理线程,所述调度线程控制多个纤程实现相应多个处理线程的功能,且所述多个纤程共享其对应调度线程的堆栈资源;所述方法包括:
当前被执行的调度线程获得当前被执行纤程所发送的调度消息,所述调度消息携带有目的标识;
判断所述目的标识是否为自身内部纤程的标识,如果是,则根据所述调度消息,从当前被执行纤程切换到具有目的标识的纤程,以实现线程内部纤程的切换;
否则,将所述调度消息发送至所述目的标识对应的线程,并且在当前被执行纤程执行完毕后,释放相应CPU资源,并保存自身的堆栈信息,以此实现线程间的切换。
根据权利要求1所述的方法,其特征在于,所述则根据所述调度消息,从当前被执行纤程切换到具有目的标识的纤程,具体为:
将所述调度消息保存在其对应的存储邮箱中;
在当前被执行纤程执行完毕后,解析所述存储邮箱中的调度消息,并根据解析结果,调度并执行所述目的标识对应的纤程。
根据权利要求1所述的方法,其特征在于,当所述目标标识对应的线程为处理线程时,所述目的标识对应的线程对所述调度消息的处理过程包括:
接收所述调度消息;
在所述当前被执行的调度线程的当前被执行纤程执行完毕,并释放相应CPU资源后,从操作系统获得相应CPU资源;
解析所述调度消息,并根据解析结果,由操作系统调度并执行。
根据权利要求1所述的方法,其特征在于,当所述目的标识对应的线程为调度线程时,所述目的标识对应的线程对所述调度消息的处理过程包括:
接收所述调度消息;
将所述调度消息放置到所述目的标识对应纤程的存储邮箱中,并将所述目的标识对应的纤程放置到自身的调度队列中;
在当前被执行的调度线程的当前被执行纤程执行完毕,并释放相应CPU资源后,从操作系统获得相应的CPU资源;
查询自身的调度队列,获得所述目的标识对应纤程,并查询所述目的标识对应纤程的存储邮箱,解析所述调度消息,并根据解析结果,调度并执行所述目的标识对应纤程。
根据权利要求1所述的方法,其特征在于,所述调度消息携带有消息优先级;
相应的,当调度线程的存储邮箱或纤程的存储邮箱中存在多个调度消息时,按照优先级从高到低的顺序处理所述调度消息。
一种多线程管理架构,其特征在于,包括:
操作系统、调度线程以及处理线程;
所述调度线程控制多个纤程实现相应多个处理线程的功能,且所述多个纤程共享其对应调度线程的堆栈资源;
其中,适用于所述多线程管理架构的多线程管理方法包括:
当前被执行的调度线程获得当前被执行纤程所发送的调度消息,所述调度消息携带有目的标识;
判断所述目的标识是否为自身内部纤程的标识,如果是,则根据所述调度消息,从当前被执行纤程切换到具有目的标识的纤程,以实现线程内部纤程的切换;
否则,将所述调度消息发送至所述目的标识对应的线程,并且在当前被执行纤程执行完毕后,释放相应CPU资源,并保存自身的堆栈信息,以此实现线程间的切换。

说明书

说明书一种多线程管理方法及架构
技术领域
本发明涉及技术领域,特别是涉及一种多线程管理方法及架构。
背景技术
线程,也被称为轻量级进程,是程序执行流的最小单元;一个标准的线程由线程ID,当前指令指针、寄存器集合和堆栈组成。另外,线程是进程中的一个实体,是被系统独立调度和分配的基本单元,线程自己不拥有系统资源,只拥有一点自己在运行过程中必不可少的资源,但它可与同属一个进程的其他线程共享进程所拥有的全部资源。一个线程可以创建和撤销另一个线程,同一个进程中的多个线程之间可以并发执行。由于线程之间的相互制约,致使线程在运行过程中呈现出间断性。线程也有就绪、阻塞和运行三种基本状态。每一个程序都至少有一个线程,那就是程序本身。线程是程序中一个单一的顺序控制流程,在单个程序中同时运行多个线程完成不同的工作,称为多线程。
在嵌入式系统中,线程间可以互相切换。比如,某此线程间切换过程如图1所示。在整个过程中,各线程的时间分配如图2所示。其中,时间轴上各时间点的说明为:
(1)0~T1为空闲;
(2)T1~T2为线程1处理需要的时间;
(3)T2~T3为线程1切换到线程2需要的时间;
(4)T3~T4为线程2处理需要的时间;
(5)T4~T5为线程2切换到线程3需要的时间;
(6)T5~T6为线程3处理所需的时间。
由图2可知,处理整个流程所需的时间总开销为(T6‑T1)。其中,线程的处理时间开销为(T2‑T1)+(T4‑T3)+(T6‑T5);线程间切换次数为2次,切换产生的调度时间开销为(T3‑T2)+(T5‑T4)。由于线程有自己的堆栈,线程间切换时,需要保存程序计数器、上下文指针、运行状态、寄存器组等信息,使得线程间切换的时间开销比较大。而随着线程数量的增加,线程间切换时调度算法的时间复杂度和空间复杂度会相应的增加,同时线程间切换的次数也会增加,这样使得总时间开销与线程数量会呈现出近似平方的关系。因此,当线程个数达到一定数量时,线程切换带来的时间开销是不可忽略的,甚至会严重影响系统的性能。
为了避免线程间切换带来的时间开销过大,现有的解决办法是减少线程数量,减少线程间单次调度的时间开销以及线程间切换的次数。但是,线程数量的减少意味着每个线程需要处理的功能增加,从而造成单个线程功能庞大,结构复杂,对于前期开发以及后期维护都带来极大不便;而且软件架构不易改变,不利于功能扩展和软件升级。
因此,如何降低多个线程的切换带来的时间开销,从而降低整个线程处理过程的总开销是一个值得关注的问题。
发明内容
为解决上述技术问题,本发明实施例提供了一种多线程管理方法及架构,以降低多线程的切换时间开销,技术方案如下:
一种多线程管理方法,适用于由操作系统控制多个线程的架构中,其中,多个线程包括调度线程和处理线程,所述调度线程控制多个纤程实现相应多个处理线程的功能,且所述多个纤程共享其对应调度线程的堆栈资源;所述方法包括:
当前被执行的调度线程获得当前被执行纤程所发送的调度消息,所述调度消息携带有目的标识;
判断所述目的标识是否为自身内部纤程的标识,如果是,则根据所述调度消息,从当前被执行纤程切换到具有目的标识的纤程,以实现线程内部纤程的切换;
否则,将所述调度消息发送至所述目的标识对应的线程,并且在当前被执行纤程执行完毕后,释放相应CPU资源,并保存自身的堆栈信息,以此实现线程间的切换。
其中,所述则根据所述调度消息,从当前被执行纤程切换到具有目的标识的纤程,具体为:
将所述调度消息保存在其对应的存储邮箱中;
在当前被执行纤程执行完毕后,解析所述存储邮箱中的调度消息,并根据解析结果,调度并执行所述目的标识对应的纤程。
其中,当所述目标标识对应的线程为处理线程时,所述目的标识对应的线程对所述调度消息的处理过程包括:
接收所述调度消息;
在所述当前被执行的调度线程的当前被执行纤程执行完毕,并释放相应CPU资源后,从操作系统获得相应CPU资源;
解析所述调度消息,并根据解析结果,由操作系统调度并执行。
其中,当所述目的标识对应的线程为调度线程时,所述目的标识对应的线程对所述调度消息的处理过程包括:
接收所述调度消息;
将所述调度消息放置到所述目的标识对应纤程的存储邮箱中,并将所述目的标识对应的纤程放置到自身的调度队列中;
在当前被执行的调度线程的当前被执行纤程执行完毕,并释放相应CPU资源后,从操作系统获得相应的CPU资源;
查询自身的调度队列,获得所述目的标识对应纤程,并查询所述目的标识对应纤程的存储邮箱,解析所述调度消息,并根据解析结果,调度并执行所述目的标识对应纤程。
其中,所述调度消息携带有消息优先级;
相应的,当调度线程的存储邮箱或纤程的存储邮箱中存在多个调度消息时,按照优先级从高到低的顺序处理所述调度消息。
相应的,本发明实施例还提供一种多线程管理架构,包括:
操作系统、调度线程以及处理线程;
所述调度线程控制多个纤程实现相应多个处理线程的功能,且所述多个纤程共享其对应调度线程的堆栈资源;
其中,适用于所述多线程管理架构的多线程管理方法包括:
当前被执行的调度线程获得当前被执行纤程所发送的调度消息,所述调度消息携带有目的标识;
判断所述目的标识是否为自身内部纤程的标识,如果是,则根据所述调度消息,从当前被执行纤程切换到具有目的标识的纤程,以实现线程内部纤程的切换;
否则,将所述调度消息发送至所述目的标识对应的线程,并且在当前被执行纤程执行完毕后,释放相应CPU资源,并保存自身的堆栈信息,以此实现线程间的切换。
本发明实施例所提供的技术方案,通过设置控制多个纤程实现多个处理处理的功能的调度线程,使得特定处理线程之间的切换转换为所述特定处理线程对应调度线程内部的纤程之间的切换。由于纤程受调度线程控制,且多个纤程共享其对应调度线程的堆栈资源,使得纤程之间的切换时间开销大大降低。通过利用本方案,操作系统所控制的多个线程之间的切换次数减少,切换开销大大降低。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单的介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
图1为现有技术中的线程关系图;
图2为现有技术中多线程切换示意图;
图3为本发明实施例提供的一种多线程管理方法的第一种流程图;
图4为本发明实施例提供的一种多线程管理方法的第二种流程图;
图5为本发明实施例提供的一种多线程管理方法的第三种流程图;
图6为本发明实施例提供的一种多线程管理方法中调度线程内部纤程的切换示意图;
图7为本发明实施例提供的一种多线程管理方法中调度线程之间纤程的切换示意图;
图8为本发明实施例提供的一种多线程管理方法中普通线程与调度线程的纤程的切换示意图;
图9为本发明实施例所提供的一种多线程管理架构的结构示意图。
具体实施方式
为了降低多个线程的切换所带来的时间开销,从而降低整个线程处理过程的总开销,本发明实施例提供了一种多线程管理方法及架构。
下面首先对本发明实施例所提供的一种多线程管理方法进行介绍。
一种多线程管理方法,其适用于由操作系统控制多个线程的架构中,其中,多个线程包括调度线程和处理线程,所述调度线程控制多个纤程实现相应多个处理线程的功能,且所述多个纤程共享其对应调度线程的堆栈资源;所述方法包括:
当前被执行的调度线程获得当前被执行纤程所发送的调度消息,所述调度消息携带有目的标识;
判断所述目的标识是否为自身内部纤程的标识,如果是,则根据所述调度消息,从当前被执行纤程切换到具有目的标识的纤程,以实现线程内部纤程的切换;
否则,将所述调度消息发送至所述目的标识对应的线程,并且在当前被执行纤程执行完毕后,释放相应CPU资源,并保存自身的堆栈信息,以此实现线程间的切换。
本发明实施例所提供的技术方案,通过设置控制多个纤程实现多个处理处理的功能的调度线程,使得特定处理线程之间的切换转换为所述特定处理线程对应调度线程内部的纤程之间的切换。由于纤程受调度线程控制,且多个纤程共享其对应调度线程的堆栈资源,使得纤程之间的切换时间开销大大降低。通过利用本方案,操作系统所控制的多个线程之间的切换次数减少,切换开销大大降低。
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
本发明实施例所提供的方案适用于由操作系统控制多个线程的架构中。其中,该多个线程包括:调度线程和处理线程。调度线程与处理线程具有相应的堆栈资源,在处理线程与调度线程之间、处理线程之间、调度线程之间进行切换时,需要保存程序计算器、上下文指针、运行状态、寄存器等堆栈信息。可以理解的是,操作系统为其控制的多个线程分配CPU资源,当线程获得CPU资源后,即可由操作系统进行调度并执行。
其中,每一调度线程控制多个纤程实现多个处理线程的功能。纤程没有自己的堆栈资源,多个纤程共享其对应的调度线程的堆栈资源,因此同一调度线程中纤程之间的切换无需进行堆栈信息的保存,相对于线程之间切换,切换开销较少。可以理解的是,纤程属于调度线程的一部分;从功能上看,每个纤程是一个独立的功能单元;在一个调度线程中可以自由添加纤程,纤程数目可以由用户进行配置的。
为了对本发明实施例所提供的多线程管理方法进行清晰介绍,下面首先详细介绍一下本发明实施例所涉及的处理线程、调度线程、纤程的管理结构以及它们之间的结构关系。
(1)处理线程的管理结构:
操作系统负责管理处理线程的调度、堆栈、运行状态等信息。处理线程管理结构TCB包含用于创建处理线程时所需的各种属性,包括优先级、入口函数、栈大小和系统分配的线程ID等信息。为统一管理所有处理线程,还需要定义一个处理线程描述符结构,用于关联TCB结构。
例如:处理线程管理结构实现伪代码可以如下:


使用THREAD_DESC类型的全局数组管理所有创建的处理线程,通过数组的索引就可以找到相应处理线程的TCB。线程创建后,Inuse成员置1,表示该数组元素被分配到该处理线程。
(2)调度线程管理结构:
操作系统负责管理调度线程的调度、堆栈、运行状态等信息。调度线程也具有普通线程所具有的TCB,包含用于创建调度线程时所需的各种属性,包括优先级、入口函数、栈大小和系统分配的线程ID等信息。
同时,调度线程负责管理纤程。调度线程管理一个消息队列,通过消息队列中消息的个数来判断是否调度纤程。为了实现纤程的调度,需定义一个调度线程管理结构SCB,该结构包含消息队列描述符、调度队列ready队列、pend队列、存储邮箱mailbox、当前处理的纤程描述符等信息。
例如:调度线程管理结构实现伪代码可以如下:


mailbox中维护一个消息队列,用于维护同一调度线程中不同纤程间发送的消息。消息队列可以分为多种优先级,改变了操作系统消息队列先进先出的管理模式,增加了消息队列的灵活性。mailbox中消息队列采用哈希链表的管理结构,使得不同优先级的消息入列、出列都非常简单。可以理解的是,优先级种类可以根据实际用户需求进行设置,例如:可以设置由1级到5级且优先级依次降低的5种优先级,或者,设置由6级到9级且优先级依次升高的4种优先级。
在结构SCB_T中,有两个纤程处理队列,一个是调度队列ready队列,其用于存储待调度的纤程;另一个是pend队列,其用于存储已经被调度过的纤程。其中,ready队列的管理机制与mailbox一致,也可以拥有多种优先级,并采用哈希链表的管理结构;但其与mailbox不同的是,ready队列中纤程的优先级是从调度消息的优先级中获取,而不是自身设定的,这样使得纤程属性较为宽泛,同时,提高了纤程的灵活性,最终使得线程调度也变得简单高效。对于pend队列而言,其与ready队列结构一致,在此不再赘述。
(3)纤程管理结构:
纤程是调度线程的实体,所有纤程都通过调度线程来控制。在纤程的管理中,需要一个纤程管理结构PCB,其中定义了纤程名称、存储邮箱mailbox、入口函数、纤程描述符等信息。
例如:纤程管理结构的实现伪代码可以如下:

纤程管理结构PCB中也有一个mailbox,它与调度线程的mailbox管理结构一致,都采用哈希链表的方式进行管理。不同点在于,调度线程mailbox维护的是同一调度线程中不同纤程间发送的消息,而纤程mailbox维护的是其他线程、或其他调度线程中的纤程发送给本纤程的消息。
下面基于上述对处理线程、调度线程以及纤程的介绍,对本发明实施例所提供的一种多线程管理方法进行详细介绍。
需要说明的是,该方法适用于由操作系统控制多个线程的架构。多个线程包括调度线程和处理线程。调度线程控制多个纤程实现相应多个处理线程的功能,并且多个纤程共享其对应的调度线程的堆栈资源。其中,操作系统可见处理线程和调度纤程,不可见调度线程所管理的纤程。可以理解的是,操作系统为处理线程和调度线程分配CPU资源,以使线程可以被执行;调度线程在获得CPU资源后,可以调度执行纤程。
如图3所示,一种多线程管理方法,包括:
S101,当前被执行的调度线程获得当前被执行纤程所发送的调度消息,所述调度消息携带有目的标识;
对于操作系统而言,某一调度线程获得CPU资源后,处于被调度执行状态;而对于当前被执行的调度线程而言,被执行的是其内部的某一个纤程。
在纤程被调度执行的过程中,其会构造一个调度消息,该调度消息携带有目的标识。该目的标识为下一被调度执行的纤程或处理线程的标识。
S102,判断所述目的标识是否为自身内部纤程的标识,如果是,执行步骤S103;否则,执行步骤S104;
S103,根据该调度消息,从当前被执行纤程切换到具有目的标识的纤程,以实现线程内部纤程的切换;
在目的标识为当前被执行的调度线程内部纤程的标识时,则将该调度消息保存在其对应的存储邮箱mailbox中;在当前被执行纤程执行完毕后,解析该存储邮箱mailbox中的调度消息,并根据解析结果,调度并执行该目的标识对应的纤程,以此实现调度线程内部纤程之间的切换。
S104,将该调度消息发送至所述目的标识对应的线程,执行步骤S105;
在目的标识不为当前被执行的调度线程内部纤程的标识时,表明该目的标识将对应某一处理线程或者其他调度线程的纤程,此时,需要将该调度消息发送至相应的目的标识对应的处理线程或目的标识对应纤程的调度纤程。
S105,在当前被执行纤程执行完毕后,释放相应CPU资源,并保存自身的堆栈信息,以此实现线程间的切换。
当当前被执行的调度线程将该调度消息发送至其其他线程时,其他线程对接收到的该调度消息的处理可以为:
当所述目标标识对应的线程为处理线程时,所述目的标识对应的线程对所述调度消息的处理过程,如图4所示,可以包括:
S201,接收所述调度消息;
S202,在所述当前被执行的调度线程的当前被执行纤程执行完毕,并释放相应CPU资源后,从操作系统获得相应CPU资源;
S203,解析所述调度消息,并根据解析结果,由操作系统调度并执行。
当所述目的标识对应的线程为调度线程时,所述目的标识对应的线程对所述调度消息的处理过程,如图5所示,可以包括:
S301,接收所述调度消息;
S302,将所述调度消息放置到所述目的标识对应纤程的存储邮箱中,并将所述目的标识对应的纤程放置到自身的调度队列中;
S303,在当前被执行的调度线程的当前被执行纤程执行完毕,并释放相应CPU资源后,从操作系统获得相应的CPU资源;
S304,查询自身的调度队列,获得所述目的标识对应纤程,并查询所述目的标识对应纤程的存储邮箱,解析所述调度消息;
S305,根据解析结果,调度并执行所述目的标识对应纤程。
本发明实施例所提供的技术方案,通过设置控制多个纤程实现多个处理处理的功能的调度线程,使得特定处理线程之间的切换转换为所述特定处理线程对应调度线程内部的纤程之间的切换。由于纤程受调度线程控制,且多个纤程共享其对应调度线程的堆栈资源,使得纤程之间的切换时间开销大大降低,从而使得操作系统所控制的多个线程之间的切换次数减少,切换开销大大降低。
可以理解的是,调度消息还可携带消息优先级;相应的,当调度线程的存储邮箱或纤程的存储邮箱中存在多个调度消息时,按照优先级从高到低的顺序处理所述调度消息。
下面结合具体的应用实例,对本发明所提供的多线程管理方法进行介绍。
具体实施例一:
如图6所示,同一调度线程内不同纤程之间的调度消息传递带来的纤程调度过程:
(1)在某一时刻,纤程a1被调度线程A调度执行,如实线①所示;
(2)在纤程a1被执行的过程中,纤程a1构造一调度消息,该调度消息所携带的目的标识为a2;
(3)调度线程A对该调度消息进行判断后,确定该目的标识为其自身内部纤程的标识;
(4)调度线程A将该调度消息放置到调度线程A的存储邮箱mailbox中,如虚箭头线②所示;
(5)纤程a1执行完毕后,调度线程A重新进入纤程调度过程,查询其mailbox中的调度消息并进行解析,纤程a1发送的调度消息被解析出来,如虚箭头线③所示;
(6)根据解析结果,纤程a2被调度线程A调度并执行,如实线④所示。
本具体实施例中,通过(1)~(6)实现了同一调度线程内部不同纤程之间的切换。
具体实施例二:
如图7所示,不同调度线程的不同纤程之间的消息传递带来的纤程调度过程:
(1)某一时刻,纤程a1被调度线程A执行,如实线①所示;
(2)在纤程a1被执行的过程中,纤程a1构造一调度消息,该调度消息所携带的目的标识为b2;
(3)调度线程A对所述调度消息进行判断后,确定该目的标识为调度线程B中纤程的标识;
(4)调度线程A将该调度消息发送给调度线程B;
(5)调度线程B将该调度消息放置到纤程b2的存储邮箱mailbox中,如虚箭头线②所示,并将纤程b2放置到自身的ready队列中;
(6)调度线程A的纤程a1执行完毕后,调度线程A释放CPU资源,并保存自身的堆栈信息;
(7)调度线程B获得CPU资源后,进入纤程调度过程,查询ready队列;
(8)调度线程B从ready队列中解析出纤程b2,并查询纤程b2的mailbox,之前纤程a1发送的调度消息被解析出来,如虚箭头线③所示;
(9)根据解析结果,纤程b2被调度纤程B调度并执行,如实线④所示。
通过本实施例的(1)~(9)实现了不同调度线程的不同纤程之间的切换。
具体实施例三:
如图8所示,处理线程与调度线程之间的调度消息传递带来的纤程调度过程:
(1)在某一时刻,处理线程C被操作系统调度执行;
(2)在处理线程C被执行的过程中,处理线程C构造一调度消息,该调度消息所携带的目的标识为b2;
(3)处理线程C将该调度消息发送至调度线程B;
(4)调度线程B将该调度消息放置到纤程b2的存储邮箱mailbox中,如虚箭头线①所示所示,并将纤程b2放置到自身的ready队列中;
(5)处理线程C执行完毕后,处理纤程C释放CPU资源,并保存自身的堆栈信息;
(6)调度线程B获得CPU资源后,进入纤程调度过程,查询ready队列;
(7)调度线程B从调度队列ready中解析出纤程b2,并查询纤程b2的mailbox,之前纤程a1发送的调度消息被解析出来,如虚箭头线②所示;
(8)根据解析结果,纤程b2被调度纤程B调度并执行,如实线③所示。
通过本实施例的(1)~(8)实现了普通线程与调度线程中纤程的切换。
综上所述,调度线程进行纤程调度的基本条件有两个:调度线程的存储邮箱mailbox中有调度消息或者调度线程的ready队列不为空。当两个条件同时存在时,可以根据实际需求来决定是先处理mailbox中的消息,还是ready队列中的纤程。由于具有两个不同的调度条件,因此每个调度线程可以采用不同的调度算法,使用比较灵活。比如:在调度线程A中,优先处理该调度线程内部不同纤程间的消息,则在调度时首先查询mailbox中的消息队列;在调度纤程B中,优先处理其他线程发送给该线程的消息,则在调度时优先查询ready队列。需要说明的是,在某一时刻,一个调度线程只能采用一种调度方式,但是,对于调度线程的整个调度过程而言,其调度机制可以在运行过程中根据实际的调度消息流进行动态配置,进而增加系统的灵活性,并提高系统效率。
通过以上的方法实施例的描述,所属领域的技术人员可以清楚地了解到本发明可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件,但很多情况下前者是更佳的实施方式。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:只读存储器(ROM)、随机存取存储器(RAM)、磁碟或者光盘等各种可以存储程序代码的介质。
相应的,本发明实施例还提供一种多线程管理架构,如图9所示,可以包括:
操作系统、调度线程以及处理线程;
所述调度线程控制多个纤程实现相应多个处理线程的功能,且所述多个纤程共享其对应调度线程的堆栈资源;
其中,适用于所述多线程管理架构的多线程管理方法包括:
当前被执行的调度线程获得当前被执行纤程所发送的调度消息,所述调度消息携带有目的标识;
判断所述目的标识是否为自身内部纤程的标识,如果是,则根据所述调度消息,从当前被执行纤程切换到具有目的标识的纤程,以实现线程内部纤程的切换;
否则,将所述调度消息发送至所述目的标识对应的线程,并且在当前被执行纤程执行完毕后,释放相应CPU资源,并保存自身的堆栈信息,以此实现线程间的切换。
对于装置或系统实施例而言,由于其基本相应于方法实施例,所以相关之处参见方法实施例的部分说明即可。以上所描述的装置或系统实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。本领域普通技术人员在不付出创造性劳动的情况下,即可以理解并实施。
在本发明所提供的几个实施例中,应该理解到,所揭露的系统,装置和方法,在没有超过本申请的精神和范围内,可以通过其他的方式实现。当前的实施例只是一种示范性的例子,不应该作为限制,所给出的具体内容不应该限制本申请的目的。例如,所述单元或子单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或多个子单元结合一起。另外,多个单元可以或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。
另外,所描述系统,装置和方法以及不同实施例的示意图,在不超出本申请的范围内,可以与其它系统,模块,技术或方法结合或集成。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
以上所述仅是本发明的具体实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。

一种多线程管理方法及架构.pdf_第1页
第1页 / 共18页
一种多线程管理方法及架构.pdf_第2页
第2页 / 共18页
一种多线程管理方法及架构.pdf_第3页
第3页 / 共18页
点击查看更多>>
资源描述

《一种多线程管理方法及架构.pdf》由会员分享,可在线阅读,更多相关《一种多线程管理方法及架构.pdf(18页珍藏版)》请在专利查询网上搜索。

1、(10)申请公布号 CN 103136047 A (43)申请公布日 2013.06.05 CN 103136047 A *CN103136047A* (21)申请号 201110391566.8 (22)申请日 2011.11.30 G06F 9/48(2006.01) (71)申请人 大唐联诚信息系统技术有限公司 地址 100191 北京市海淀区学院路 40 号 (72)发明人 韩正超 王海涛 范大庆 (74)专利代理机构 北京集佳知识产权代理有限 公司 11227 代理人 逯长明 (54) 发明名称 一种多线程管理方法及架构 (57) 摘要 本发明公开了一种多线程管理方法及架构。 该方法。

2、适用于由操作系统控制多个线程的架构 中, 其中, 多个线程包括调度线程和处理线程 ; 该 方法包括 : 当前被执行的调度线程获得当前被执 行纤程所发送的调度消息, 该调度消息携带有目 的标识 ; 判断该目的标识是否为自身内部纤程的 标识, 如果是, 则根据该调度消息, 从当前被执行 纤程切换到具有目的标识的纤程, 以实现线程内 部纤程的切换 ; 否则, 将该调度消息发送至该目 的标识对应的线程, 并且在当前被执行纤程执行 完毕后, 释放相应 CPU 资源, 并保存自身的堆栈信 息, 以此实现线程间的切换。通过利用本方案, 操 作系统所控制的多个线程之间的切换次数减少, 切换开销大大降低。 (5。

3、1)Int.Cl. 权利要求书 2 页 说明书 11 页 附图 4 页 (19)中华人民共和国国家知识产权局 (12)发明专利申请 权利要求书2页 说明书11页 附图4页 (10)申请公布号 CN 103136047 A CN 103136047 A *CN103136047A* 1/2 页 2 1. 一种多线程管理方法, 其特征在于, 适用于由操作系统控制多个线程的架构中, 其 中, 多个线程包括调度线程和处理线程, 所述调度线程控制多个纤程实现相应多个处理线 程的功能, 且所述多个纤程共享其对应调度线程的堆栈资源 ; 所述方法包括 : 当前被执行的调度线程获得当前被执行纤程所发送的调度消息。

4、, 所述调度消息携带有 目的标识 ; 判断所述目的标识是否为自身内部纤程的标识, 如果是, 则根据所述调度消息, 从当前 被执行纤程切换到具有目的标识的纤程, 以实现线程内部纤程的切换 ; 否则, 将所述调度消息发送至所述目的标识对应的线程, 并且在当前被执行纤程执行 完毕后, 释放相应 CPU 资源, 并保存自身的堆栈信息, 以此实现线程间的切换。 2. 根据权利要求 1 所述的方法, 其特征在于, 所述则根据所述调度消息, 从当前被执行 纤程切换到具有目的标识的纤程, 具体为 : 将所述调度消息保存在其对应的存储邮箱中 ; 在当前被执行纤程执行完毕后, 解析所述存储邮箱中的调度消息, 并根。

5、据解析结果, 调 度并执行所述目的标识对应的纤程。 3. 根据权利要求 1 所述的方法, 其特征在于, 当所述目标标识对应的线程为处理线程 时, 所述目的标识对应的线程对所述调度消息的处理过程包括 : 接收所述调度消息 ; 在所述当前被执行的调度线程的当前被执行纤程执行完毕, 并释放相应 CPU 资源后, 从操作系统获得相应 CPU 资源 ; 解析所述调度消息, 并根据解析结果, 由操作系统调度并执行。 4. 根据权利要求 1 所述的方法, 其特征在于, 当所述目的标识对应的线程为调度线程 时, 所述目的标识对应的线程对所述调度消息的处理过程包括 : 接收所述调度消息 ; 将所述调度消息放置到。

6、所述目的标识对应纤程的存储邮箱中, 并将所述目的标识对应 的纤程放置到自身的调度队列中 ; 在当前被执行的调度线程的当前被执行纤程执行完毕, 并释放相应 CPU 资源后, 从操 作系统获得相应的 CPU 资源 ; 查询自身的调度队列, 获得所述目的标识对应纤程, 并查询所述目的标识对应纤程的 存储邮箱, 解析所述调度消息, 并根据解析结果, 调度并执行所述目的标识对应纤程。 5. 根据权利要求 1 所述的方法, 其特征在于, 所述调度消息携带有消息优先级 ; 相应的, 当调度线程的存储邮箱或纤程的存储邮箱中存在多个调度消息时, 按照优先 级从高到低的顺序处理所述调度消息。 6. 一种多线程管理。

7、架构, 其特征在于, 包括 : 操作系统、 调度线程以及处理线程 ; 所述调度线程控制多个纤程实现相应多个处理线程的功能, 且所述多个纤程共享其对 应调度线程的堆栈资源 ; 其中, 适用于所述多线程管理架构的多线程管理方法包括 : 当前被执行的调度线程获得当前被执行纤程所发送的调度消息, 所述调度消息携带有 目的标识 ; 权 利 要 求 书 CN 103136047 A 2 2/2 页 3 判断所述目的标识是否为自身内部纤程的标识, 如果是, 则根据所述调度消息, 从当前 被执行纤程切换到具有目的标识的纤程, 以实现线程内部纤程的切换 ; 否则, 将所述调度消息发送至所述目的标识对应的线程, 。

8、并且在当前被执行纤程执行 完毕后, 释放相应 CPU 资源, 并保存自身的堆栈信息, 以此实现线程间的切换。 权 利 要 求 书 CN 103136047 A 3 1/11 页 4 一种多线程管理方法及架构 技术领域 0001 本发明涉及技术领域, 特别是涉及一种多线程管理方法及架构。 背景技术 0002 线程, 也被称为轻量级进程, 是程序执行流的最小单元 ; 一个标准的线程由线程 ID, 当前指令指针、 寄存器集合和堆栈组成。 另外, 线程是进程中的一个实体, 是被系统独立 调度和分配的基本单元, 线程自己不拥有系统资源, 只拥有一点自己在运行过程中必不可 少的资源, 但它可与同属一个进程。

9、的其他线程共享进程所拥有的全部资源。一个线程可以 创建和撤销另一个线程, 同一个进程中的多个线程之间可以并发执行。由于线程之间的相 互制约, 致使线程在运行过程中呈现出间断性。线程也有就绪、 阻塞和运行三种基本状态。 每一个程序都至少有一个线程, 那就是程序本身。 线程是程序中一个单一的顺序控制流程, 在单个程序中同时运行多个线程完成不同的工作, 称为多线程。 0003 在嵌入式系统中, 线程间可以互相切换。比如, 某此线程间切换过程如图 1 所示。 在整个过程中, 各线程的时间分配如图 2 所示。其中, 时间轴上各时间点的说明为 : 0004 (1)0 T1 为空闲 ; 0005 (2)T1。

10、 T2 为线程 1 处理需要的时间 ; 0006 (3)T2 T3 为线程 1 切换到线程 2 需要的时间 ; 0007 (4)T3 T4 为线程 2 处理需要的时间 ; 0008 (5)T4 T5 为线程 2 切换到线程 3 需要的时间 ; 0009 (6)T5 T6 为线程 3 处理所需的时间。 0010 由图 2 可知, 处理整个流程所需的时间总开销为 (T6-T1)。其中, 线程的处理时间 开销为 (T2-T1)+(T4-T3)+(T6-T5) ; 线程间切换次数为 2 次, 切换产生的调度时间开销为 (T3-T2)+(T5-T4)。 由于线程有自己的堆栈, 线程间切换时, 需要保存程。

11、序计数器、 上下文指 针、 运行状态、 寄存器组等信息, 使得线程间切换的时间开销比较大。而随着线程数量的增 加, 线程间切换时调度算法的时间复杂度和空间复杂度会相应的增加, 同时线程间切换的 次数也会增加, 这样使得总时间开销与线程数量会呈现出近似平方的关系。 因此, 当线程个 数达到一定数量时, 线程切换带来的时间开销是不可忽略的, 甚至会严重影响系统的性能。 0011 为了避免线程间切换带来的时间开销过大, 现有的解决办法是减少线程数量, 减 少线程间单次调度的时间开销以及线程间切换的次数。但是, 线程数量的减少意味着每个 线程需要处理的功能增加, 从而造成单个线程功能庞大, 结构复杂,。

12、 对于前期开发以及后期 维护都带来极大不便 ; 而且软件架构不易改变, 不利于功能扩展和软件升级。 0012 因此, 如何降低多个线程的切换带来的时间开销, 从而降低整个线程处理过程的 总开销是一个值得关注的问题。 发明内容 0013 为解决上述技术问题, 本发明实施例提供了一种多线程管理方法及架构, 以降低 说 明 书 CN 103136047 A 4 2/11 页 5 多线程的切换时间开销, 技术方案如下 : 0014 一种多线程管理方法, 适用于由操作系统控制多个线程的架构中, 其中, 多个线程 包括调度线程和处理线程, 所述调度线程控制多个纤程实现相应多个处理线程的功能, 且 所述多个。

13、纤程共享其对应调度线程的堆栈资源 ; 所述方法包括 : 0015 当前被执行的调度线程获得当前被执行纤程所发送的调度消息, 所述调度消息携 带有目的标识 ; 0016 判断所述目的标识是否为自身内部纤程的标识, 如果是, 则根据所述调度消息, 从 当前被执行纤程切换到具有目的标识的纤程, 以实现线程内部纤程的切换 ; 0017 否则, 将所述调度消息发送至所述目的标识对应的线程, 并且在当前被执行纤程 执行完毕后, 释放相应 CPU 资源, 并保存自身的堆栈信息, 以此实现线程间的切换。 0018 其中, 所述则根据所述调度消息, 从当前被执行纤程切换到具有目的标识的纤程, 具体为 : 001。

14、9 将所述调度消息保存在其对应的存储邮箱中 ; 0020 在当前被执行纤程执行完毕后, 解析所述存储邮箱中的调度消息, 并根据解析结 果, 调度并执行所述目的标识对应的纤程。 0021 其中, 当所述目标标识对应的线程为处理线程时, 所述目的标识对应的线程对所 述调度消息的处理过程包括 : 0022 接收所述调度消息 ; 0023 在所述当前被执行的调度线程的当前被执行纤程执行完毕, 并释放相应 CPU 资源 后, 从操作系统获得相应 CPU 资源 ; 0024 解析所述调度消息, 并根据解析结果, 由操作系统调度并执行。 0025 其中, 当所述目的标识对应的线程为调度线程时, 所述目的标识。

15、对应的线程对所 述调度消息的处理过程包括 : 0026 接收所述调度消息 ; 0027 将所述调度消息放置到所述目的标识对应纤程的存储邮箱中, 并将所述目的标识 对应的纤程放置到自身的调度队列中 ; 0028 在当前被执行的调度线程的当前被执行纤程执行完毕, 并释放相应 CPU 资源后, 从操作系统获得相应的 CPU 资源 ; 0029 查询自身的调度队列, 获得所述目的标识对应纤程, 并查询所述目的标识对应纤 程的存储邮箱, 解析所述调度消息, 并根据解析结果, 调度并执行所述目的标识对应纤程。 0030 其中, 所述调度消息携带有消息优先级 ; 0031 相应的, 当调度线程的存储邮箱或纤。

16、程的存储邮箱中存在多个调度消息时, 按照 优先级从高到低的顺序处理所述调度消息。 0032 相应的, 本发明实施例还提供一种多线程管理架构, 包括 : 0033 操作系统、 调度线程以及处理线程 ; 0034 所述调度线程控制多个纤程实现相应多个处理线程的功能, 且所述多个纤程共享 其对应调度线程的堆栈资源 ; 0035 其中, 适用于所述多线程管理架构的多线程管理方法包括 : 0036 当前被执行的调度线程获得当前被执行纤程所发送的调度消息, 所述调度消息携 说 明 书 CN 103136047 A 5 3/11 页 6 带有目的标识 ; 0037 判断所述目的标识是否为自身内部纤程的标识,。

17、 如果是, 则根据所述调度消息, 从 当前被执行纤程切换到具有目的标识的纤程, 以实现线程内部纤程的切换 ; 0038 否则, 将所述调度消息发送至所述目的标识对应的线程, 并且在当前被执行纤程 执行完毕后, 释放相应 CPU 资源, 并保存自身的堆栈信息, 以此实现线程间的切换。 0039 本发明实施例所提供的技术方案, 通过设置控制多个纤程实现多个处理处理的功 能的调度线程, 使得特定处理线程之间的切换转换为所述特定处理线程对应调度线程内部 的纤程之间的切换。由于纤程受调度线程控制, 且多个纤程共享其对应调度线程的堆栈资 源, 使得纤程之间的切换时间开销大大降低。 通过利用本方案, 操作系。

18、统所控制的多个线程 之间的切换次数减少, 切换开销大大降低。 附图说明 0040 为了更清楚地说明本发明实施例或现有技术中的技术方案, 下面将对实施例或现 有技术描述中所需要使用的附图作简单的介绍, 显而易见地, 下面描述中的附图仅仅是本 发明的一些实施例, 对于本领域普通技术人员来讲, 在不付出创造性劳动性的前提下, 还可 以根据这些附图获得其他的附图。 0041 图 1 为现有技术中的线程关系图 ; 0042 图 2 为现有技术中多线程切换示意图 ; 0043 图 3 为本发明实施例提供的一种多线程管理方法的第一种流程图 ; 0044 图 4 为本发明实施例提供的一种多线程管理方法的第二种。

19、流程图 ; 0045 图 5 为本发明实施例提供的一种多线程管理方法的第三种流程图 ; 0046 图 6 为本发明实施例提供的一种多线程管理方法中调度线程内部纤程的切换示 意图 ; 0047 图 7 为本发明实施例提供的一种多线程管理方法中调度线程之间纤程的切换示 意图 ; 0048 图 8 为本发明实施例提供的一种多线程管理方法中普通线程与调度线程的纤程 的切换示意图 ; 0049 图 9 为本发明实施例所提供的一种多线程管理架构的结构示意图。 具体实施方式 0050 为了降低多个线程的切换所带来的时间开销, 从而降低整个线程处理过程的总开 销, 本发明实施例提供了一种多线程管理方法及架构。。

20、 0051 下面首先对本发明实施例所提供的一种多线程管理方法进行介绍。 0052 一种多线程管理方法, 其适用于由操作系统控制多个线程的架构中, 其中, 多个线 程包括调度线程和处理线程, 所述调度线程控制多个纤程实现相应多个处理线程的功能, 且所述多个纤程共享其对应调度线程的堆栈资源 ; 所述方法包括 : 0053 当前被执行的调度线程获得当前被执行纤程所发送的调度消息, 所述调度消息携 带有目的标识 ; 0054 判断所述目的标识是否为自身内部纤程的标识, 如果是, 则根据所述调度消息, 从 说 明 书 CN 103136047 A 6 4/11 页 7 当前被执行纤程切换到具有目的标识的。

21、纤程, 以实现线程内部纤程的切换 ; 0055 否则, 将所述调度消息发送至所述目的标识对应的线程, 并且在当前被执行纤程 执行完毕后, 释放相应 CPU 资源, 并保存自身的堆栈信息, 以此实现线程间的切换。 0056 本发明实施例所提供的技术方案, 通过设置控制多个纤程实现多个处理处理的功 能的调度线程, 使得特定处理线程之间的切换转换为所述特定处理线程对应调度线程内部 的纤程之间的切换。由于纤程受调度线程控制, 且多个纤程共享其对应调度线程的堆栈资 源, 使得纤程之间的切换时间开销大大降低。 通过利用本方案, 操作系统所控制的多个线程 之间的切换次数减少, 切换开销大大降低。 0057 。

22、下面将结合本发明实施例中的附图, 对本发明实施例中的技术方案进行清楚、 完 整地描述, 显然, 所描述的实施例仅是本发明一部分实施例, 而不是全部的实施例。基于本 发明中的实施例, 本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实 施例, 都属于本发明保护的范围。 0058 本发明实施例所提供的方案适用于由操作系统控制多个线程的架构中。其中, 该 多个线程包括 : 调度线程和处理线程。 调度线程与处理线程具有相应的堆栈资源, 在处理线 程与调度线程之间、 处理线程之间、 调度线程之间进行切换时, 需要保存程序计算器、 上下 文指针、 运行状态、 寄存器等堆栈信息。可以理解的是, 。

23、操作系统为其控制的多个线程分配 CPU 资源, 当线程获得 CPU 资源后, 即可由操作系统进行调度并执行。 0059 其中, 每一调度线程控制多个纤程实现多个处理线程的功能。纤程没有自己的堆 栈资源, 多个纤程共享其对应的调度线程的堆栈资源, 因此同一调度线程中纤程之间的切 换无需进行堆栈信息的保存, 相对于线程之间切换, 切换开销较少。可以理解的是, 纤程属 于调度线程的一部分 ; 从功能上看, 每个纤程是一个独立的功能单元 ; 在一个调度线程中 可以自由添加纤程, 纤程数目可以由用户进行配置的。 0060 为了对本发明实施例所提供的多线程管理方法进行清晰介绍, 下面首先详细介绍 一下本发。

24、明实施例所涉及的处理线程、 调度线程、 纤程的管理结构以及它们之间的结构关 系。 0061 (1) 处理线程的管理结构 : 0062 操作系统负责管理处理线程的调度、 堆栈、 运行状态等信息。处理线程管理结构 TCB 包含用于创建处理线程时所需的各种属性, 包括优先级、 入口函数、 栈大小和系统分配 的线程 ID 等信息。为统一管理所有处理线程, 还需要定义一个处理线程描述符结构, 用于 关联 TCB 结构。 0063 例如 : 处理线程管理结构实现伪代码可以如下 : 0064 0065 说 明 书 CN 103136047 A 7 5/11 页 8 0066 使用 THREAD_DESC 类。

25、型的全局数组管理所有创建的处理线程, 通过数组的索引就 可以找到相应处理线程的 TCB。线程创建后, Inuse 成员置 1, 表示该数组元素被分配到该 处理线程。 0067 (2) 调度线程管理结构 : 0068 操作系统负责管理调度线程的调度、 堆栈、 运行状态等信息。 调度线程也具有普通 线程所具有的 TCB, 包含用于创建调度线程时所需的各种属性, 包括优先级、 入口函数、 栈大 小和系统分配的线程 ID 等信息。 0069 同时, 调度线程负责管理纤程。 调度线程管理一个消息队列, 通过消息队列中消息 的个数来判断是否调度纤程。为了实现纤程的调度, 需定义一个调度线程管理结构 SCB。

26、, 该 结构包含消息队列描述符、 调度队列ready队列、 pend队列、 存储邮箱mailbox、 当前处理的 纤程描述符等信息。 0070 例如 : 调度线程管理结构实现伪代码可以如下 : 0071 0072 说 明 书 CN 103136047 A 8 6/11 页 9 0073 mailbox 中维护一个消息队列, 用于维护同一调度线程中不同纤程间发送的消息。 消息队列可以分为多种优先级, 改变了操作系统消息队列先进先出的管理模式, 增加了消 息队列的灵活性。 mailbox中消息队列采用哈希链表的管理结构, 使得不同优先级的消息入 列、 出列都非常简单。 可以理解的是, 优先级种类可。

27、以根据实际用户需求进行设置, 例如 : 可 以设置由 1 级到 5 级且优先级依次降低的 5 种优先级, 或者, 设置由 6 级到 9 级且优先级依 次升高的 4 种优先级。 0074 在结构 SCB_T 中, 有两个纤程处理队列, 一个是调度队列 ready 队列, 其用于存储 待调度的纤程 ; 另一个是 pend 队列, 其用于存储已经被调度过的纤程。其中, ready 队列 的管理机制与 mailbox 一致, 也可以拥有多种优先级, 并采用哈希链表的管理结构 ; 但其与 mailbox 不同的是, ready 队列中纤程的优先级是从调度消息的优先级中获取, 而不是自身 设定的, 这样使。

28、得纤程属性较为宽泛, 同时, 提高了纤程的灵活性, 最终使得线程调度也变 得简单高效。对于 pend 队列而言, 其与 ready 队列结构一致, 在此不再赘述。 0075 (3) 纤程管理结构 : 0076 纤程是调度线程的实体, 所有纤程都通过调度线程来控制。 在纤程的管理中, 需要 一个纤程管理结构 PCB, 其中定义了纤程名称、 存储邮箱 mailbox、 入口函数、 纤程描述符等 信息。 0077 例如 : 纤程管理结构的实现伪代码可以如下 : 0078 说 明 书 CN 103136047 A 9 7/11 页 10 0079 纤程管理结构 PCB 中也有一个 mailbox, 它。

29、与调度线程的 mailbox 管理结构一致, 都采用哈希链表的方式进行管理。不同点在于, 调度线程 mailbox 维护的是同一调度线程 中不同纤程间发送的消息, 而纤程 mailbox 维护的是其他线程、 或其他调度线程中的纤程 发送给本纤程的消息。 0080 下面基于上述对处理线程、 调度线程以及纤程的介绍, 对本发明实施例所提供的 一种多线程管理方法进行详细介绍。 0081 需要说明的是, 该方法适用于由操作系统控制多个线程的架构。多个线程包括调 度线程和处理线程。调度线程控制多个纤程实现相应多个处理线程的功能, 并且多个纤程 共享其对应的调度线程的堆栈资源。 其中, 操作系统可见处理线。

30、程和调度纤程, 不可见调度 线程所管理的纤程。可以理解的是, 操作系统为处理线程和调度线程分配 CPU 资源, 以使线 程可以被执行 ; 调度线程在获得 CPU 资源后, 可以调度执行纤程。 0082 如图 3 所示, 一种多线程管理方法, 包括 : 0083 S101, 当前被执行的调度线程获得当前被执行纤程所发送的调度消息, 所述调度 消息携带有目的标识 ; 0084 对于操作系统而言, 某一调度线程获得 CPU 资源后, 处于被调度执行状态 ; 而对于 当前被执行的调度线程而言, 被执行的是其内部的某一个纤程。 0085 在纤程被调度执行的过程中, 其会构造一个调度消息, 该调度消息携带。

31、有目的标 识。该目的标识为下一被调度执行的纤程或处理线程的标识。 0086 S102, 判断所述目的标识是否为自身内部纤程的标识, 如果是, 执行步骤 S103 ; 否 则, 执行步骤 S104 ; 0087 S103, 根据该调度消息, 从当前被执行纤程切换到具有目的标识的纤程, 以实现线 程内部纤程的切换 ; 0088 在目的标识为当前被执行的调度线程内部纤程的标识时, 则将该调度消息保存在 其对应的存储邮箱mailbox中 ; 在当前被执行纤程执行完毕后, 解析该存储邮箱mailbox中 说 明 书 CN 103136047 A 10 8/11 页 11 的调度消息, 并根据解析结果, 。

32、调度并执行该目的标识对应的纤程, 以此实现调度线程内部 纤程之间的切换。 0089 S104, 将该调度消息发送至所述目的标识对应的线程, 执行步骤 S105 ; 0090 在目的标识不为当前被执行的调度线程内部纤程的标识时, 表明该目的标识将对 应某一处理线程或者其他调度线程的纤程, 此时, 需要将该调度消息发送至相应的目的标 识对应的处理线程或目的标识对应纤程的调度纤程。 0091 S105, 在当前被执行纤程执行完毕后, 释放相应 CPU 资源, 并保存自身的堆栈信 息, 以此实现线程间的切换。 0092 当当前被执行的调度线程将该调度消息发送至其其他线程时, 其他线程对接收到 的该调度。

33、消息的处理可以为 : 0093 当所述目标标识对应的线程为处理线程时, 所述目的标识对应的线程对所述调度 消息的处理过程, 如图 4 所示, 可以包括 : 0094 S201, 接收所述调度消息 ; 0095 S202, 在所述当前被执行的调度线程的当前被执行纤程执行完毕, 并释放相应 CPU 资源后, 从操作系统获得相应 CPU 资源 ; 0096 S203, 解析所述调度消息, 并根据解析结果, 由操作系统调度并执行。 0097 当所述目的标识对应的线程为调度线程时, 所述目的标识对应的线程对所述调度 消息的处理过程, 如图 5 所示, 可以包括 : 0098 S301, 接收所述调度消息。

34、 ; 0099 S302, 将所述调度消息放置到所述目的标识对应纤程的存储邮箱中, 并将所述目 的标识对应的纤程放置到自身的调度队列中 ; 0100 S303, 在当前被执行的调度线程的当前被执行纤程执行完毕, 并释放相应 CPU 资 源后, 从操作系统获得相应的 CPU 资源 ; 0101 S304, 查询自身的调度队列, 获得所述目的标识对应纤程, 并查询所述目的标识对 应纤程的存储邮箱, 解析所述调度消息 ; 0102 S305, 根据解析结果, 调度并执行所述目的标识对应纤程。 0103 本发明实施例所提供的技术方案, 通过设置控制多个纤程实现多个处理处理的功 能的调度线程, 使得特定。

35、处理线程之间的切换转换为所述特定处理线程对应调度线程内部 的纤程之间的切换。由于纤程受调度线程控制, 且多个纤程共享其对应调度线程的堆栈资 源, 使得纤程之间的切换时间开销大大降低, 从而使得操作系统所控制的多个线程之间的 切换次数减少, 切换开销大大降低。 0104 可以理解的是, 调度消息还可携带消息优先级 ; 相应的, 当调度线程的存储邮箱或 纤程的存储邮箱中存在多个调度消息时, 按照优先级从高到低的顺序处理所述调度消息。 0105 下面结合具体的应用实例, 对本发明所提供的多线程管理方法进行介绍。 0106 具体实施例一 : 0107 如图 6 所示, 同一调度线程内不同纤程之间的调度。

36、消息传递带来的纤程调度过 程 : 0108 (1) 在某一时刻, 纤程 a1 被调度线程 A 调度执行, 如实线所示 ; 0109 (2) 在纤程 a1 被执行的过程中, 纤程 a1 构造一调度消息, 该调度消息所携带的目 说 明 书 CN 103136047 A 11 9/11 页 12 的标识为 a2 ; 0110 (3) 调度线程 A 对该调度消息进行判断后, 确定该目的标识为其自身内部纤程的 标识 ; 0111 (4)调度线程A将该调度消息放置到调度线程A的存储邮箱mailbox中, 如虚箭头 线所示 ; 0112 (5)纤程a1执行完毕后, 调度线程A重新进入纤程调度过程, 查询其m。

37、ailbox中的 调度消息并进行解析, 纤程 a1 发送的调度消息被解析出来, 如虚箭头线所示 ; 0113 (6) 根据解析结果, 纤程 a2 被调度线程 A 调度并执行, 如实线所示。 0114 本具体实施例中, 通过(1)(6)实现了同一调度线程内部不同纤程之间的切换。 0115 具体实施例二 : 0116 如图 7 所示, 不同调度线程的不同纤程之间的消息传递带来的纤程调度过程 : 0117 (1) 某一时刻, 纤程 a1 被调度线程 A 执行, 如实线所示 ; 0118 (2) 在纤程 a1 被执行的过程中, 纤程 a1 构造一调度消息, 该调度消息所携带的目 的标识为 b2 ; 0。

38、119 (3)调度线程A对所述调度消息进行判断后, 确定该目的标识为调度线程B中纤程 的标识 ; 0120 (4) 调度线程 A 将该调度消息发送给调度线程 B ; 0121 (5) 调度线程 B 将该调度消息放置到纤程 b2 的存储邮箱 mailbox 中, 如虚箭头线 所示, 并将纤程 b2 放置到自身的 ready 队列中 ; 0122 (6)调度线程A的纤程a1执行完毕后, 调度线程A释放CPU资源, 并保存自身的堆 栈信息 ; 0123 (7) 调度线程 B 获得 CPU 资源后, 进入纤程调度过程, 查询 ready 队列 ; 0124 (8)调度线程B从ready队列中解析出纤程。

39、b2, 并查询纤程b2的mailbox, 之前纤 程 a1 发送的调度消息被解析出来, 如虚箭头线所示 ; 0125 (9) 根据解析结果, 纤程 b2 被调度纤程 B 调度并执行, 如实线所示。 0126 通过本实施例的 (1) (9) 实现了不同调度线程的不同纤程之间的切换。 0127 具体实施例三 : 0128 如图 8 所示, 处理线程与调度线程之间的调度消息传递带来的纤程调度过程 : 0129 (1) 在某一时刻, 处理线程 C 被操作系统调度执行 ; 0130 (2) 在处理线程 C 被执行的过程中, 处理线程 C 构造一调度消息, 该调度消息所携 带的目的标识为 b2 ; 013。

40、1 (3) 处理线程 C 将该调度消息发送至调度线程 B ; 0132 (4) 调度线程 B 将该调度消息放置到纤程 b2 的存储邮箱 mailbox 中, 如虚箭头线 所示所示, 并将纤程 b2 放置到自身的 ready 队列中 ; 0133 (5) 处理线程 C 执行完毕后, 处理纤程 C 释放 CPU 资源, 并保存自身的堆栈信息 ; 0134 (6) 调度线程 B 获得 CPU 资源后, 进入纤程调度过程, 查询 ready 队列 ; 0135 (7)调度线程B从调度队列ready中解析出纤程b2, 并查询纤程b2的mailbox, 之 前纤程 a1 发送的调度消息被解析出来, 如虚箭。

41、头线所示 ; 0136 (8) 根据解析结果, 纤程 b2 被调度纤程 B 调度并执行, 如实线所示。 说 明 书 CN 103136047 A 12 10/11 页 13 0137 通过本实施例的 (1) (8) 实现了普通线程与调度线程中纤程的切换。 0138 综上所述, 调度线程进行纤程调度的基本条件有两个 : 调度线程的存储邮箱 mailbox中有调度消息或者调度线程的ready队列不为空。 当两个条件同时存在时, 可以根 据实际需求来决定是先处理 mailbox 中的消息, 还是 ready 队列中的纤程。由于具有两个 不同的调度条件, 因此每个调度线程可以采用不同的调度算法, 使用。

42、比较灵活。比如 : 在调 度线程A中, 优先处理该调度线程内部不同纤程间的消息, 则在调度时首先查询mailbox中 的消息队列 ; 在调度纤程 B 中, 优先处理其他线程发送给该线程的消息, 则在调度时优先查 询 ready 队列。需要说明的是, 在某一时刻, 一个调度线程只能采用一种调度方式, 但是, 对 于调度线程的整个调度过程而言, 其调度机制可以在运行过程中根据实际的调度消息流进 行动态配置, 进而增加系统的灵活性, 并提高系统效率。 0139 通过以上的方法实施例的描述, 所属领域的技术人员可以清楚地了解到本发明可 借助软件加必需的通用硬件平台的方式来实现, 当然也可以通过硬件, 。

43、但很多情况下前者 是更佳的实施方式。基于这样的理解, 本发明的技术方案本质上或者说对现有技术做出贡 献的部分可以以软件产品的形式体现出来, 该计算机软件产品存储在一个存储介质中, 包 括若干指令用以使得一台计算机设备 ( 可以是个人计算机, 服务器, 或者网络设备等 ) 执 行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括 : 只读存储器 (ROM)、 随机存取存储器 (RAM)、 磁碟或者光盘等各种可以存储程序代码的介质。 0140 相应的, 本发明实施例还提供一种多线程管理架构, 如图 9 所示, 可以包括 : 0141 操作系统、 调度线程以及处理线程 ; 0142 所述。

44、调度线程控制多个纤程实现相应多个处理线程的功能, 且所述多个纤程共享 其对应调度线程的堆栈资源 ; 0143 其中, 适用于所述多线程管理架构的多线程管理方法包括 : 0144 当前被执行的调度线程获得当前被执行纤程所发送的调度消息, 所述调度消息携 带有目的标识 ; 0145 判断所述目的标识是否为自身内部纤程的标识, 如果是, 则根据所述调度消息, 从 当前被执行纤程切换到具有目的标识的纤程, 以实现线程内部纤程的切换 ; 0146 否则, 将所述调度消息发送至所述目的标识对应的线程, 并且在当前被执行纤程 执行完毕后, 释放相应 CPU 资源, 并保存自身的堆栈信息, 以此实现线程间的切。

45、换。 0147 对于装置或系统实施例而言, 由于其基本相应于方法实施例, 所以相关之处参见 方法实施例的部分说明即可。以上所描述的装置或系统实施例仅仅是示意性的, 其中所述 作为分离部件说明的单元可以是或者也可以不是物理上分开的, 作为单元显示的部件可以 是或者也可以不是物理单元, 即可以位于一个地方, 或者也可以分布到多个网络单元上。 可 以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。 本领域普通 技术人员在不付出创造性劳动的情况下, 即可以理解并实施。 0148 在本发明所提供的几个实施例中, 应该理解到, 所揭露的系统, 装置和方法, 在没 有超过本申请的精神和范围。

46、内, 可以通过其他的方式实现。当前的实施例只是一种示范性 的例子, 不应该作为限制, 所给出的具体内容不应该限制本申请的目的。例如, 所述单元或 子单元的划分, 仅仅为一种逻辑功能划分, 实际实现时可以有另外的划分方式, 例如多个单 元或多个子单元结合一起。另外, 多个单元可以或组件可以结合或者可以集成到另一个系 说 明 书 CN 103136047 A 13 11/11 页 14 统, 或一些特征可以忽略, 或不执行。 0149 另外, 所描述系统, 装置和方法以及不同实施例的示意图, 在不超出本申请的范围 内, 可以与其它系统, 模块, 技术或方法结合或集成。 另一点, 所显示或讨论的相互。

47、之间的耦 合或直接耦合或通信连接可以是通过一些接口, 装置或单元的间接耦合或通信连接, 可以 是电性, 机械或其它的形式。 0150 以上所述仅是本发明的具体实施方式, 应当指出, 对于本技术领域的普通技术人 员来说, 在不脱离本发明原理的前提下, 还可以做出若干改进和润饰, 这些改进和润饰也应 视为本发明的保护范围。 说 明 书 CN 103136047 A 14 1/4 页 15 图 1 图 2 图 3 说 明 书 附 图 CN 103136047 A 15 2/4 页 16 图 4 图 5 说 明 书 附 图 CN 103136047 A 16 3/4 页 17 图 6 图 7 说 明 书 附 图 CN 103136047 A 17 4/4 页 18 图 8 图 9 说 明 书 附 图 CN 103136047 A 18 。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 物理 > 计算;推算;计数


copyright@ 2017-2020 zhuanlichaxun.net网站版权所有
经营许可证编号:粤ICP备2021068784号-1