CN103136047A - 一种多线程管理方法及架构 - Google Patents
一种多线程管理方法及架构 Download PDFInfo
- Publication number
- CN103136047A CN103136047A CN2011103915668A CN201110391566A CN103136047A CN 103136047 A CN103136047 A CN 103136047A CN 2011103915668 A CN2011103915668 A CN 2011103915668A CN 201110391566 A CN201110391566 A CN 201110391566A CN 103136047 A CN103136047 A CN 103136047A
- Authority
- CN
- China
- Prior art keywords
- thread
- scheduling
- fine journey
- threads
- fine
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
Images
Landscapes
- Mobile Radio Communication Systems (AREA)
Abstract
本发明公开了一种多线程管理方法及架构。该方法适用于由操作系统控制多个线程的架构中,其中,多个线程包括调度线程和处理线程;该方法包括:当前被执行的调度线程获得当前被执行纤程所发送的调度消息,该调度消息携带有目的标识;判断该目的标识是否为自身内部纤程的标识,如果是,则根据该调度消息,从当前被执行纤程切换到具有目的标识的纤程,以实现线程内部纤程的切换;否则,将该调度消息发送至该目的标识对应的线程,并且在当前被执行纤程执行完毕后,释放相应CPU资源,并保存自身的堆栈信息,以此实现线程间的切换。通过利用本方案,操作系统所控制的多个线程之间的切换次数减少,切换开销大大降低。
Description
技术领域
本发明涉及技术领域,特别是涉及一种多线程管理方法及架构。
背景技术
线程,也被称为轻量级进程,是程序执行流的最小单元;一个标准的线程由线程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资源,并保存自身的堆栈信息,以此实现线程间的切换。
对于装置或系统实施例而言,由于其基本相应于方法实施例,所以相关之处参见方法实施例的部分说明即可。以上所描述的装置或系统实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。本领域普通技术人员在不付出创造性劳动的情况下,即可以理解并实施。
在本发明所提供的几个实施例中,应该理解到,所揭露的系统,装置和方法,在没有超过本申请的精神和范围内,可以通过其他的方式实现。当前的实施例只是一种示范性的例子,不应该作为限制,所给出的具体内容不应该限制本申请的目的。例如,所述单元或子单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或多个子单元结合一起。另外,多个单元可以或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。
另外,所描述系统,装置和方法以及不同实施例的示意图,在不超出本申请的范围内,可以与其它系统,模块,技术或方法结合或集成。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
以上所述仅是本发明的具体实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。
Claims (6)
1.一种多线程管理方法,其特征在于,适用于由操作系统控制多个线程的架构中,其中,多个线程包括调度线程和处理线程,所述调度线程控制多个纤程实现相应多个处理线程的功能,且所述多个纤程共享其对应调度线程的堆栈资源;所述方法包括:
当前被执行的调度线程获得当前被执行纤程所发送的调度消息,所述调度消息携带有目的标识;
判断所述目的标识是否为自身内部纤程的标识,如果是,则根据所述调度消息,从当前被执行纤程切换到具有目的标识的纤程,以实现线程内部纤程的切换;
否则,将所述调度消息发送至所述目的标识对应的线程,并且在当前被执行纤程执行完毕后,释放相应CPU资源,并保存自身的堆栈信息,以此实现线程间的切换。
2.根据权利要求1所述的方法,其特征在于,所述则根据所述调度消息,从当前被执行纤程切换到具有目的标识的纤程,具体为:
将所述调度消息保存在其对应的存储邮箱中;
在当前被执行纤程执行完毕后,解析所述存储邮箱中的调度消息,并根据解析结果,调度并执行所述目的标识对应的纤程。
3.根据权利要求1所述的方法,其特征在于,当所述目标标识对应的线程为处理线程时,所述目的标识对应的线程对所述调度消息的处理过程包括:
接收所述调度消息;
在所述当前被执行的调度线程的当前被执行纤程执行完毕,并释放相应CPU资源后,从操作系统获得相应CPU资源;
解析所述调度消息,并根据解析结果,由操作系统调度并执行。
4.根据权利要求1所述的方法,其特征在于,当所述目的标识对应的线程为调度线程时,所述目的标识对应的线程对所述调度消息的处理过程包括:
接收所述调度消息;
将所述调度消息放置到所述目的标识对应纤程的存储邮箱中,并将所述目的标识对应的纤程放置到自身的调度队列中;
在当前被执行的调度线程的当前被执行纤程执行完毕,并释放相应CPU资源后,从操作系统获得相应的CPU资源;
查询自身的调度队列,获得所述目的标识对应纤程,并查询所述目的标识对应纤程的存储邮箱,解析所述调度消息,并根据解析结果,调度并执行所述目的标识对应纤程。
5.根据权利要求1所述的方法,其特征在于,所述调度消息携带有消息优先级;
相应的,当调度线程的存储邮箱或纤程的存储邮箱中存在多个调度消息时,按照优先级从高到低的顺序处理所述调度消息。
6.一种多线程管理架构,其特征在于,包括:
操作系统、调度线程以及处理线程;
所述调度线程控制多个纤程实现相应多个处理线程的功能,且所述多个纤程共享其对应调度线程的堆栈资源;
其中,适用于所述多线程管理架构的多线程管理方法包括:
当前被执行的调度线程获得当前被执行纤程所发送的调度消息,所述调度消息携带有目的标识;
判断所述目的标识是否为自身内部纤程的标识,如果是,则根据所述调度消息,从当前被执行纤程切换到具有目的标识的纤程,以实现线程内部纤程的切换;
否则,将所述调度消息发送至所述目的标识对应的线程,并且在当前被执行纤程执行完毕后,释放相应CPU资源,并保存自身的堆栈信息,以此实现线程间的切换。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201110391566.8A CN103136047B (zh) | 2011-11-30 | 2011-11-30 | 一种多线程管理方法及架构 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201110391566.8A CN103136047B (zh) | 2011-11-30 | 2011-11-30 | 一种多线程管理方法及架构 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN103136047A true CN103136047A (zh) | 2013-06-05 |
CN103136047B CN103136047B (zh) | 2016-08-17 |
Family
ID=48495907
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201110391566.8A Active CN103136047B (zh) | 2011-11-30 | 2011-11-30 | 一种多线程管理方法及架构 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN103136047B (zh) |
Cited By (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107045478A (zh) * | 2017-04-28 | 2017-08-15 | 福建星瑞格软件有限公司 | 一种轻量级线程分析与运行可视化方法 |
CN107168870A (zh) * | 2017-04-28 | 2017-09-15 | 福建星瑞格软件有限公司 | 一种运行时程序信息获取方法 |
CN107992344A (zh) * | 2016-10-25 | 2018-05-04 | 腾讯科技(深圳)有限公司 | 一种协程实现方法及装置 |
CN109308215A (zh) * | 2017-07-28 | 2019-02-05 | 广联达科技股份有限公司 | 一种基于纤程的交互方法、交互系统及计算机装置 |
CN109426556A (zh) * | 2017-08-31 | 2019-03-05 | 大唐移动通信设备有限公司 | 一种进程调度方法和装置 |
CN109491780A (zh) * | 2018-11-23 | 2019-03-19 | 鲍金龙 | 多任务调度方法及装置 |
CN109948012A (zh) * | 2019-03-14 | 2019-06-28 | 北京达佳互联信息技术有限公司 | 序列号的生成方法、装置及存储介质 |
CN112328514A (zh) * | 2020-11-12 | 2021-02-05 | 深圳中微电科技有限公司 | 一种多线程处理器系统产生独立进程标识的方法和装置 |
CN114466151A (zh) * | 2022-04-11 | 2022-05-10 | 武汉中科通达高新技术股份有限公司 | 国标相机的视频存储系统、计算机设备及存储介质 |
Citations (13)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1601475A (zh) * | 2003-09-25 | 2005-03-30 | 国际商业机器公司 | 用于在smt处理器中进行cpi负载平衡的系统和方法 |
CN1801101A (zh) * | 2006-01-17 | 2006-07-12 | 浙江大学 | Java操作系统中线程的实现和线程状态切换的方法 |
CN1825286A (zh) * | 2006-03-31 | 2006-08-30 | 浙江大学 | 嵌入式sram操作系统线程实现和线程状态转换的方法 |
US20070150900A1 (en) * | 2005-12-27 | 2007-06-28 | Hankins Richard A | Data structure and management techniques for local user-level thread data |
CN101091166A (zh) * | 2004-12-30 | 2007-12-19 | 英特尔公司 | 保存多个执行上下文的方法和装置 |
CN101160565A (zh) * | 2004-12-30 | 2008-04-09 | 英特尔公司 | 无操作系统干预情况下调度os隔离定序器上的线程的机制 |
CN101189575A (zh) * | 2005-04-05 | 2008-05-28 | 英特尔公司 | 定序器地址管理 |
US20080148259A1 (en) * | 2006-12-19 | 2008-06-19 | Hankins Richard A | Structured exception handling for application-managed thread units |
CN101273335A (zh) * | 2005-09-26 | 2008-09-24 | 英特尔公司 | 用户级线程的调度优化 |
CN101317156A (zh) * | 2005-11-29 | 2008-12-03 | 英特尔公司 | 基于编译器的用户级线程调度优化 |
CN102047218A (zh) * | 2008-06-02 | 2011-05-04 | 微软公司 | 进程中的调度器实例 |
CN102147749A (zh) * | 2004-12-30 | 2011-08-10 | 英特尔公司 | 仿真os隔离定序器上的用户级多线程处理的机制 |
CN102163163A (zh) * | 2010-12-17 | 2011-08-24 | 北京凯思昊鹏软件工程技术有限公司 | 无线传感器网络传感器小节点操作系统及其实现方法 |
-
2011
- 2011-11-30 CN CN201110391566.8A patent/CN103136047B/zh active Active
Patent Citations (13)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1601475A (zh) * | 2003-09-25 | 2005-03-30 | 国际商业机器公司 | 用于在smt处理器中进行cpi负载平衡的系统和方法 |
CN102147749A (zh) * | 2004-12-30 | 2011-08-10 | 英特尔公司 | 仿真os隔离定序器上的用户级多线程处理的机制 |
CN101091166A (zh) * | 2004-12-30 | 2007-12-19 | 英特尔公司 | 保存多个执行上下文的方法和装置 |
CN101160565A (zh) * | 2004-12-30 | 2008-04-09 | 英特尔公司 | 无操作系统干预情况下调度os隔离定序器上的线程的机制 |
CN101189575A (zh) * | 2005-04-05 | 2008-05-28 | 英特尔公司 | 定序器地址管理 |
CN101273335A (zh) * | 2005-09-26 | 2008-09-24 | 英特尔公司 | 用户级线程的调度优化 |
CN101317156A (zh) * | 2005-11-29 | 2008-12-03 | 英特尔公司 | 基于编译器的用户级线程调度优化 |
US20070150900A1 (en) * | 2005-12-27 | 2007-06-28 | Hankins Richard A | Data structure and management techniques for local user-level thread data |
CN1801101A (zh) * | 2006-01-17 | 2006-07-12 | 浙江大学 | Java操作系统中线程的实现和线程状态切换的方法 |
CN1825286A (zh) * | 2006-03-31 | 2006-08-30 | 浙江大学 | 嵌入式sram操作系统线程实现和线程状态转换的方法 |
US20080148259A1 (en) * | 2006-12-19 | 2008-06-19 | Hankins Richard A | Structured exception handling for application-managed thread units |
CN102047218A (zh) * | 2008-06-02 | 2011-05-04 | 微软公司 | 进程中的调度器实例 |
CN102163163A (zh) * | 2010-12-17 | 2011-08-24 | 北京凯思昊鹏软件工程技术有限公司 | 无线传感器网络传感器小节点操作系统及其实现方法 |
Cited By (15)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107992344A (zh) * | 2016-10-25 | 2018-05-04 | 腾讯科技(深圳)有限公司 | 一种协程实现方法及装置 |
CN107992344B (zh) * | 2016-10-25 | 2021-03-02 | 腾讯科技(深圳)有限公司 | 一种协程实现方法及装置 |
CN107045478B (zh) * | 2017-04-28 | 2019-12-13 | 福建星瑞格软件有限公司 | 一种轻量级线程分析与运行可视化方法 |
CN107168870A (zh) * | 2017-04-28 | 2017-09-15 | 福建星瑞格软件有限公司 | 一种运行时程序信息获取方法 |
CN107045478A (zh) * | 2017-04-28 | 2017-08-15 | 福建星瑞格软件有限公司 | 一种轻量级线程分析与运行可视化方法 |
CN107168870B (zh) * | 2017-04-28 | 2021-10-29 | 福建星瑞格软件有限公司 | 一种运行时程序信息获取方法 |
CN109308215A (zh) * | 2017-07-28 | 2019-02-05 | 广联达科技股份有限公司 | 一种基于纤程的交互方法、交互系统及计算机装置 |
CN109426556B (zh) * | 2017-08-31 | 2021-06-04 | 大唐移动通信设备有限公司 | 一种进程调度方法和装置 |
CN109426556A (zh) * | 2017-08-31 | 2019-03-05 | 大唐移动通信设备有限公司 | 一种进程调度方法和装置 |
CN109491780A (zh) * | 2018-11-23 | 2019-03-19 | 鲍金龙 | 多任务调度方法及装置 |
CN109948012A (zh) * | 2019-03-14 | 2019-06-28 | 北京达佳互联信息技术有限公司 | 序列号的生成方法、装置及存储介质 |
CN109948012B (zh) * | 2019-03-14 | 2021-11-16 | 北京达佳互联信息技术有限公司 | 序列号的生成方法、装置及存储介质 |
CN112328514A (zh) * | 2020-11-12 | 2021-02-05 | 深圳中微电科技有限公司 | 一种多线程处理器系统产生独立进程标识的方法和装置 |
CN112328514B (zh) * | 2020-11-12 | 2024-02-06 | 深圳中微电科技有限公司 | 一种多线程处理器系统产生独立进程标识的方法和装置 |
CN114466151A (zh) * | 2022-04-11 | 2022-05-10 | 武汉中科通达高新技术股份有限公司 | 国标相机的视频存储系统、计算机设备及存储介质 |
Also Published As
Publication number | Publication date |
---|---|
CN103136047B (zh) | 2016-08-17 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN103136047A (zh) | 一种多线程管理方法及架构 | |
CN102541640B (zh) | 一种集群gpu资源调度系统和方法 | |
CN101604264B (zh) | 超级计算机的任务调度方法及系统 | |
CN110213358A (zh) | 集群资源调度的方法、节点、设备及存储介质 | |
CN102662725B (zh) | 一种事件驱动的高并发流程虚拟机实现方法 | |
CN110162388A (zh) | 一种任务调度方法、系统及终端设备 | |
CN105656688A (zh) | 状态控制方法和装置 | |
CN104657214A (zh) | 一种基于多队列和多优先级的大数据任务管理系统和方法 | |
US20100083259A1 (en) | Directing data units to a core supporting tasks | |
CN107682206A (zh) | 基于微服务的业务流程管理系统的部署方法及系统 | |
CN102323895A (zh) | 一种基于机顶盒嵌入式操作系统实时调度方法 | |
CN106062716A (zh) | 在单任务系统中实现多任务的方法、装置及单任务系统 | |
CN108536527A (zh) | 一种嵌入式软件的任务调度方法及装置 | |
CN103235744A (zh) | 一种智能电视的应用资源管理系统 | |
CN106293934A (zh) | 一种集群系统管理优化方法及平台 | |
CN101984414A (zh) | Cpu资源的调度方法及装置 | |
CN106325996A (zh) | 一种gpu资源的分配方法及系统 | |
CN109491780A (zh) | 多任务调度方法及装置 | |
CN106385330A (zh) | 一种网络功能虚拟化编排器的实现方法及装置 | |
CN1333343C (zh) | 状态机族的并发操作 | |
CN105468682A (zh) | 一种事件调度系统 | |
CN101189579B (zh) | 用于多线程处理的使用信号量的方法和装置 | |
CN110471747A (zh) | 一种dma多通道的调度使用方法、装置及终端设备 | |
CN110519354A (zh) | 一种分布式对象存储系统及其业务处理方法和存储介质 | |
CN105653347B (zh) | 一种服务器、资源管理方法及虚拟机管理器 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant |