在对称多处理体系下实现多实例线程通信的方法及装置的制作方法

文档序号:6570884阅读:156来源:国知局
专利名称:在对称多处理体系下实现多实例线程通信的方法及装置的制作方法
技术领域
本发明涉及通信领域,更具体地,涉及一种在对称处理系统下 实现多实例线程通信的方法及装置。
背景技术
在通信领域中,随着对称多处理(Symmetrical Multi-Processing, 以下简称为SMP)、多核、超线程等概念、技术、产品的出现,通 信系统的处理能力有了极大的提升空间。目前已经有了 一些操作系 统支持SMP体系架构,可以实现多CPU协同工作,使得CPU处理 密集型的系统能力得到扩展。但传统的业务支撑软件、应用开发模 式并不能充分发挥SMP体系架构的优势,必须要做相应的调整。一种很重要的调整方式就是尽可能将系统中耗用CPU比重突 出的业务流程多实例化。否则,这种业务流程在任一时刻只能在一 个核上运行,而其他核则空闲,影响多核的整体使用效率。如果将 这种业务流程多实例化,则可由操作系统调度,并行在多个核上运 行,提高多核利用率,提升整体业务处理效率。当存在多实例化线程时,就会对整个系统的编程才莫式产生以下 影响多实例并行运行的互斥保护;多实例代码的可重入;多实例 线程的通信方式。上述前两个问题属于基于优先级抢占调度机制、多核体系结构 的共性问题,业务代码必然要考虑,此处不再详述。对于多实例线程的通信方式,涉及到以下问题其他线程向多 实例线程发消息;多实例线程向其他线程发消息;多实例线程间的 通信。因为多实例线程之间是完全并行的,相互联系主要集中于对于 共享数据的操作,所以通过互斥保护机制就可以了。这类线程间几 乎没有通信需求,即使有,也应该是广播通知方式,而不是点对点 的。本文中不估文详细讨i仑。在传统的业务支撑环境中,往往是由一个线程实现某种业务, 而为了实现线程之间的通信,每个线程都拥有其在系统中唯一的 ID,我们可称之为线程标识符(Thread Identification,以下简称为 TID或线程ID)。当一个线程要与其他业务线程通信时,只需向标 识该业务线程的TID发送消息即可。^旦在SMP体系架构下,多实例线禾呈4吏;得同一种业务可以由i午 多线程来实现,这些线程是执行同样的代码指令、完成同样的功能, 对外接口完全一样,表现形式是完全对称的。这时,如果要实现其 寸也业务线考呈与该业务线禾呈群的通信,就出i见问题,如《可标识这些多 实例线程呢?其他业务线程怎么记住系统中有哪些此类线程,有多 少,该如4可选择下一个业务处理者?发明内容为了解决上述问题,本发明提供了一种通信方法及装置,用于 在对称多处理体系下实现多实例线程通信,通过引入多实例线程族 概念,釆用多实例线程族主线程或者代理函数的方式来隔离多实例 化具体实现,从而,保持了业务线程多实例化后对外呈现的简单性、统一性,4吏得只需对业务支撑部分估文少量简单改动,就可以实现上层业务、应用在SMP体系架构上的开发部署,因此,可以充分发 捍多核并行处理的优势,进而提升业务处理系统的整体能力。为了实现上述目的,本发明的一个方面提供了一种通信方法, 用于在对称多处理体系下实现多实例线程通信,其包括以下步骤 步骤S302,在第一业务线程发送消息给第二业务线程族以进行处理 时,将消息发送给第二业务线程族的代理;步骤S304,代理根据预 定算法将消息分配给第二业务线程族中的一个子线程;以及步骤 S306,代理设置消息中的目的线程ID,并将消息发送给子线程。才艮据本发明的一个方面,该通信方法还包括以下步骤步骤 S308,当第二业务线程族中的一个子线程向第一业务线程发送消息 时,设置子线程的消息发送函数中的源线程ID和目的线程ID;以 及步骤S310,调用代理,代理重新设置源线程ID,然后发送消息。此外,才艮据本发明的一个方面,在步骤S306中,设置消息中 的目的线程ID的步骤具体为将消息中的目的线程ID替换成子线 程的线程ID。并且,在步骤S308中,-没置子线程的消息发送函凄t 中的源线程ID和目的线程ID的步骤具体为将子线程的消息发送 函数中的源线程ID设置为子线程本身的线程ID,并将目的线程ID i殳置为第一业务线程的线程ID。另外,在步骤S310中,重新设置 源线程ID的步骤具体为将子线程本身的线程ID设置为代理的线 程ID。根据本发明的实施例,预定算法为负荷均衡算法,此外,代理 包才舌以下一种主线禾呈或^C理函凄t。本发明的另 一方面还提供了 一种通信装置,用于在对称多处理 体系下实现多实例线程通信,其包括发送单元,用于在第一业务线程发送消息给第二业务线程族以进4于处理时,将消息发送给第二业务线程族的代理;分配单元,用于根据预定算法将消息分配给第 二业务线程族中的一个子线程;以及第一设置发送单元,用于设置 消息中的目的线程ID,并将消息发送给子线程。根据本发明的另一方面,该通信装置还包括第二设置发送单 元,用于当第二业务线程族中的一个子线程向第一业务线程发送消 息时,设置子线程的消息发送函数中的源线程ID和目的线程ID; 以及调用i殳置单元,用于调用代j理,重新i殳置源线禾呈ID,然后发送 消息。另夕卜,根据本发明的另一方面,第一设置发送单元用于将消息 中的目的线程ID替换成子线程的线程ID,以及第二i殳置发送单元 还用于将子线程的消息发送函数中的源线程ID设置为子线程本身 的线程ID,并将目的线程ID i殳置为第一业务线程的线程ID。此外, 调用设置单元还用于将子线程本身的线程ID设置为代理的线程 ID。如上所述,本发明实现了以下4支术效果由主线程或者代理函 数完成负载均衡处理、多实例线程的分配,并对消息发送参数中有 关多实例线程族的TID进行替换,4呆持了业务线程多实例化后对外 呈现的简单性、统一性,并且,充分发挥了多核并行处理的优势, 提升了业务处理系统的整体能力。本发明的其它特征和优点将在随后的说明书中阐述,并且,部 分地从i兌明书中变得显而易见,或者通过实施本发明而了解。本发 明的目的和其他优点可通过在所写的说明书、权利要求书、以及附 图中所特别指出的结构来实现和获得。附图it明附图用来提供对本发明的进一步理解,并且构成说明书的一部 分,与本发明的实施例一起用于解释本发明,并不构成对本发明的 限制。在附图中

图1是业务线程族C作为一个整体呈现给系统内其他线程(其 多实例化对于其他线程基本透明)的视图;图2是根据本发明的实施例采用多实例线程族主线程或者多实 例线程族代理函数后的通信处理的纟见图;图3是4艮据本发明的在对称多处理体系下实现多实例线程通信 的流禾呈图;以及图4是根据本发明的在对称多处理体系下实现多实例线程通信 的装置的冲医图。
具体实施方式
以下结合附图对本发明的优选实施例进行说明,应当理解,此 处所描述的优选实施例仅用于说明和解释本发明,并不用于限定本 发明。在本发明的下述实施例中,多实例线程族主线程或者代理函教: 都可以作为^理,实现隔离作用,为4又述方^_,本文后续主要以代 理来统称这两种方法。图1是业务线程族C作为一个整体呈现给系统内其他线程(其 多实例化对于其他线程基本透明)的视图。如图1所示,在传统单核业务体系中,业务线禾呈C 3艮其〗也线禾呈一样,也是由一个线程实体构成的。因此,其他线程在与c线程通信时,可以很明确地用C线程的TID来通信。但当移植到多核体系 中,业务线程C多实例化为Cl、 C2…Cn多个线程,并且,每个 Cn线程都有其独立的TID,我们对巴C1、 C2…Cn。这些由同一段代 码创建出来的完成同样功能的线程群称为多实例线程族C 。由于业务流程的多实例凄t量有可能^^多核体系结构有关(比如 在双核中多实例数可能为2,四核中多实例数可能为4),也就是说, n的lt量是不确定的。因此,多实例线程的TID也是不确定的,可 能随多核体系结构的变化而变化。4安照传统方式,由其他业务线程 来记^主众多多实例线考呈的TID,并且选定由其中的某一个多实例线 程来处理本次业务,这是不现实的。对于上层业务线禾呈A、 B,以及驱动线禾呈H来i兌,它们只关心 其业务上下游关系,即它的前序处理者、后序处理者,而不必关心 具体由明卩个多实例线禾呈Cn来处理。因此,多实例线考呈;疾C可以对 外以一个实体存在业务线程族C。 A、 B、 H不必面对众多、不确 定的线,呈C1、 C2…Cn。上述实现方式具有以下优点线程多实例对于其他线程基本透 明,并且,单核、多核兼容性、移植性好。但是,对于系统监控进程I来说,它需要掌握所有线程的运行 情况,比如可能通过心跳方式进行监测,需要与系统内所有线程进 行点对点通信,那么还是有必要为每个多实例线程分配独立的TID。因此,在本发明的实施例中,基本思想就是对于多实例线程 》矣C,可以用一个主线禾呈来管理,也可以简单i也通过多实例线程族 代理函数实现。系统内其他线程只需将消息发送给该主线程TID或者代^理函凄t所拥有的虚拟TID,然后由主线禾呈TID或者4戈理函凄t去 进行负载均衡,分配到某个多实例线程,并且用该多实例线程的TID 来替换掉通信函数中所用到的主线程TID,再发送出去。反之,当 某个多实例线程需要向其他线程发送消息时,则先发给所属多实例 线程族的主线程或者代理函数虚拟TID,它们将会把通信函数中的 源TID由多实例线禾呈的TID替4灸为主线禾呈TID。以下将结合图2详细描述如图3所示的通信方法,图2是根据本发明的实施例采用多实例线程族主线程或者多实例线程族代理 函数后的通信处理的视图,图3是根据本发明的在对称多处理体系 下实现多实例线程通信的流程图。在本实施例中,^!寻涉及主线禾呈方式和代i理函凄t方式,在此,倾 向于使用代理函数方式,原因如下使用主线程,对外屏蔽了其子 线程的多实例化,流程清晰,但增加了线程数量以及调度切换开销, 并且主线程成为多个线程的分发处理中心,可能会成为新的瓶颈; 而使用代理函数,其多实例线程号TID的翻译、选择在通信函数处 理过程中完成,流程稍微费解,但避免了上述主线程方式的缺点。如图3所示,在对称多处理体系下实i见多实例线考呈通信的方法 包4舌以下步架《步骤S302,在第一业务线程发送消息给第二业务线程族以进行 处理时,将消息发送给第二业务线程族的代理;步骤S304,代理根据预定算法将消息分配给第二业务线程族中 的一个子线程;步骤S306,代理设置消息中的目的线程ID,并将消息发送给 子线程,参照图2,设置消息中的目的线程ID的步骤具体是指将 消息中的目的线程ID替换成子线程的线程ID。以上步骤S302、步骤S304、以及步骤S306实现了业务线程向 线程族发送消息的整个过程,继续参照图2,线程族向业务线程发 送消息的步骤如下步骤S308,当第二业务线程族中的一个子线程向第一业务线程 发送消息时,设置子线程的消息发送函数中的源线程ID和目的线 程ID,参照图2,设置子线程的消息发送函数中的源线程ID和目 的线程ID的步骤具体为将子线程的消息发送函数中的源线程ID 设置为子线程本身的线程ID,并将目的线程ID设置为第一业务线 程的线程ID;步骤S310,调用代理,代理重新i殳置源线程ID,然后发送消 息,如图2所示,重新设置源线程ID的步骤具体为将子线程本 身的线程ID设置为代理的线程ID。至此,实现了线程族向业务线程发送消息的整个过程。在本实施例中,需要指出的是,预定算法为负荷均衡算法。此外,需要指出的是,代理函数也拥有一个TID,但无需创造 实际线程,该TID就是现有传统系统软件中该业务线程的TID,这 样整个系统软件其他线程无需更改访问它的TID,同时,为所有的 线程TID分配多实例处理函数指针数组,初始化为空。为多实例线 程族代理函数TID、多实例线程TID注册挂接具体的函数实现。其 实现的功能就是根据接收的消息类型,分发到具体的某个多实例线 程,并才艮据情况进行目标TID、源TID的转换。并且,在通信函凄t(如,postMsg、 ASEND)中增加对线程代 理函数指针数组的处理,如果不为空,则执行挂接的多实例线程族 代理函数。图4冲艮据本发明的在对称多处理体系下实现多实例线程通信的 装置400的框图。如图4所示,在对称多处理体系下实现多实例线程通信的装置 400包括发送单元402,用于在第一业务线程发送消息给第二业 务线程族以进行处理时,将消息发送给第二业务线程族的代理;分 配单元404,用于根据预定算法将消息分配给第二业务线程族中的 一个子线程;以及第一设置发送单元406,用于设置消息中的目的 线程ID,并将消息发送给子线程,其中,第一设置发送单元406 还用于将消息中的目的线程ID替换成子线程的线程ID。此外,为实现线程族向业务线程发送消息的通信,该通信装置 400还包括第二设置发送单元408,用于当第二业务线程族中的 一个子线程向第一业务线程发送消息时,设置子线程的消息发送函 凄t中的源线程ID和目的线程ID,其中,第二i殳置发送单元408还 用于将子线程的消息发送函数中的源线程ID设置为子线程本身的 线程ID,并将目的线程ID设置为第一业务线程的线程ID;以及调 用设置单元410,用于调用代理,重新设置源线程ID,然后发送消 息,其中,调用设置单元410还用于将子线程本身的线程ID设置 为f^理的线禾呈ID。在本实施例中,预定算法为负荷均衡算法,此外,代理包括以 下一种主线禾呈和^理函凄t。本发明注重的是多实例线程通信实现的系统方法,而不是具体 的软件编程实现方法,无需4安照严格的顺序,上述实施例也并不是 唯一、最佳的软件编程实现方法。以下4是供另一实施例,步骤包括(1 )修改TID数据结构,增加属性,以判断是否为多实例线 程族代理函数;(2 )创建线程多实例处理函数指针数组;(3 )实现多实例线程族代理函数(参照图2,就是多实例线程 族C的代理函数),功能包括实现负栽均衡算法,在Cl...Cn之间 进行负栽均衡,将通信函数中的目标TID由代理函数的TID替换为 选定后的多实例线程TID;(4)实现多实例线程的处理函数,功能包括将通信函数中的 源TID由具体某个多实例线程TID替换为该多实例线程族代理函数 TID,以保持多实例线程族对外的统一接口 、标识;(5 )修改通信函数实现,增加对目标TID、源TID属性的判 断,如果为多实例线程或者多实例线程族代理函H则去才丸行对应 线程的多实例处理函凄t。上述方法同样能够在对称多处理体系下实现多实例线程通信。从以上的描述中,可以看出,本发明实现了如下技术效果保 持了业务线程多实例化后对外呈现的简单性、统一性,使得只需对 业务支撑部分估文少量简单改动,就可以实现上层业务、应用在SMP 体系架构上的开发部署,因此,可以提升业务处理系统的整体能力。以上所述4又为本发明的优选实施例而已,并不用于限制本发 明,对于本领域的技术人员来说,本发明可以有各种更改和变化。 凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进 等,均应包含在本发明的保护范围之内。
权利要求
1. 一种通信方法,用于在对称多处理体系下实现多实例线程通信,其特征在于,包括以下步骤步骤S302,在第一业务线程发送消息给第二业务线程族以进行处理时,将所述消息发送给所述第二业务线程族的代理;步骤S304,所述代理根据预定算法将所述消息分配给所述第二业务线程族中的一个子线程;以及步骤S306,所述代理设置所述消息中的目的线程ID,并将所述消息发送给所述子线程。
2. 根据权利要求1所述的通信方法,其特征在于,还包括以下步 骤步骤S308,当所述第二业务线程族中的一个子线程向所 述第 一业务线程发送消息时,设置所述子线程的消息发送函数 中的源线程ID和目的线程ID;以及步骤S310,调用所述^理,所述4戈理重新i殳置所述源线 程ID,然后发送所述消息。
3. 根据权利要求1所述的通信方法,其特征在于,在所述步骤 S306中,所述i殳置所述消息中的目的线程ID的步骤具体为将所述消息中的目的线程ID替换成所述子线程的线程ID。
4. 根据权利要求2所述的通信方法,其特征在于,在所述步骤 S308中,所述i殳置所述子线程的消息发送函凄t中的源线程ID 和目的线程ID的步骤具体为将所述子线程的消息发送函数中的源线程ID设置为所述 子线程本身的线程ID,并将所述目的线程IDi殳置为所述第一 业务线程的线程ID。
5. 根据权利要求2所述的通信方法,其特征在于,在所述步骤 S310中,所述重新-没置所述源线程ID的步骤具体为将所述子线程本身的线程ID设置为所述代理的线程ID。
6. 4艮据权利要求1所述的通信方法,其特征在于,所述预定算法 为负荷均衡算法。
7. 4艮据4又利要求1所述的通信方法,其特征在于,所述代理包括 以下一种主线禾呈或^理函^:。
8. —种通信装置,用于在对称多处理体系下实现多实例线程通 信,其特征在于,包括发送单元,用于在第一业务线程发送消息给第二业务线 程族以进行处理时,将所述消息发送给所述第二业务线程族的 代理;分配单元,用于根据预定算法将所述消息分配给所述第 二业务线程族中的一个子线程;以及第一设置发送单元,用于设置所述消息中的目的线程ID, 并将所述消息发送给所述子线程。
9. 根据权利要求8所述的通信装置,其特征在于,还包括第二设置发送单元,用于当所述第二业务线程族中的一 个子线程向所述第一业务线程发送消息时,设置所述子线程的 消息发送函数中的源线程ID和目的线程ID;以及调用i殳置单元,用于调用所述^^理,重新i殳置所述源线 程ID,然后发送所述消息。
10. 根据权利要求8所述的通信装置,其特征在于,所述第一设置 发送单元,用于将所述消息中的目的线程ID替换成所述子线 孑呈的线禾呈ID,以及所述第二i殳置发送单元,用于将所述子线 程的消息发送函数中的源线程ID设置为所述子线程本身的线 程ID,并将所述目的线程ID设置为所述第一业务线程的线程 ID。
全文摘要
本发明提供了一种通信方法及装置,用于在对称多处理体系下实现多实例线程通信,该方法包括步骤S302,在第一业务线程发送消息给第二业务线程族以进行处理时,将消息发送给第二业务线程族的代理;步骤S304,代理根据预定算法将消息分配给第二业务线程族中的一个子线程;以及步骤S306,代理设置消息中的目的线程ID,并将消息发送给子线程。因此,通过本发明可以充分发挥多核并行处理的优势,进而提升了业务处理系统的整体能力。
文档编号G06F9/46GK101216780SQ20071000050
公开日2008年7月9日 申请日期2007年1月5日 优先权日2007年1月5日
发明者朱佐亮, 翌 李, 钟卫东 申请人:中兴通讯股份有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1