CN101216779A - 实现多实例线程序列化事务处理的方法 - Google Patents
实现多实例线程序列化事务处理的方法 Download PDFInfo
- Publication number
- CN101216779A CN101216779A CNA2007100005039A CN200710000503A CN101216779A CN 101216779 A CN101216779 A CN 101216779A CN A2007100005039 A CNA2007100005039 A CN A2007100005039A CN 200710000503 A CN200710000503 A CN 200710000503A CN 101216779 A CN101216779 A CN 101216779A
- Authority
- CN
- China
- Prior art keywords
- serializing
- thread
- instance
- message
- affairs
- 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
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明公开了一种实现多实例线程序列化事务处理的方法,包括以下步骤:步骤S302,业务线程向多实例业务线程族发起序列化事务,其中,序列化事务包括有序的多个消息;步骤S304,业务线程在多个消息上设置序列化事务ID号和序列化事务状态标志;步骤S306,多实例业务线程族的代理函数检测序列化事务状态标志,并且根据所检测的序列化事务状态标志来进行序列化事务映射表的相关操作。通过本发明的技术方法,实现了以下有益效果:应用了多实例线程并行运行的优势,提高了操作系统的调度利用率,并且不会出现序列化事务的乱序处理,从而保证了业务的正确实现。
Description
技术领域
本发明涉及操作系统、并行处理、业务支撑领域,并且更特别地,涉及一种SMP(Symmetric MultiProcessor,对称多处理机)体系架构下实现多实例线程序列化事务处理的方法。
背景技术
在SMP体系架构中,为了能充分利用多核并行处理的优势,往往需要尽量将处理负荷较重的关键业务流程多实例化。但线程多实例化后,又会引发许多问题,这需要一一去解决,其中,在线程多实例后序列化事务处理如何实现就是一个亟待解决的问题。
在软件系统中,通常有些线程(例如线程A)向别的线程(例如线程B)发送消息,以触发B完成某些功能。如附图1所示,某些业务可能包含了一系列处理,并且这些处理应该要保持序列化,不能乱序,否则就会导致业务失败。在单核体系中,一种业务一般都是由一个线程完成,因此,线程A可以连续向线程B发送一系列消息,而线程B可以保证串行有序地处理这些消息,从而完成这个业务,因此序列化事务处理在单核体系中一般不存在问题。如果是多机系统,如在网络上多个节点协同处理业务,由于可能出现多径传播消息,或者中间通讯节点处理消息的失序,因此就需要端到端的加入应答机制、序列号加缓存等技术,以保证序列化事务的有序处理。
而在多核体系中,如附图2所示,某些业务会由多实例线程来处理。假设线程B被多实例化了,则称之为多实例线程族B。这时线程A发起一个业务,其后续处理需要线程B完成。因此线程A向多实例线程族B发送了一系列消息,这些消息被分发到线程族B的多个实例上B1...Bn,而这些线程实例可能会被操作系统调度到不同的CPU上并行运行,因此也就可能出现消息处理的失序,导致业务的失败。如果要在多核体系上采用应答机制,则效率很低,采用传统的序列号加缓存技术则实际上无法应用多实例线程并行运行的优势,反而让很多失序的多实例线程空转,造成操作系统的调度浪费。
因此,目前采用的技术方案中存在消息处理失序导致的业务失败的问题,另外,还存在操作系统调度浪费的问题。
发明内容
本发明的主要目的在于提供一种SMP体系架构下实现多实例线程序列化事务处理的机制。
为了实现上述目的,根据本发明的实施例,提供了一种实现多实例线程序列化事务处理的方法。
该方法包括以下步骤:第一步骤,业务线程向多实例业务线程族发起序列化事务,其中,序列化事务包括有序的多个消息;第二步骤,业务线程在多个消息上设置序列化事务ID号和序列化事务状态标志;以及第三步骤,多实例业务线程族的代理函数检测序列化事务状态标志,并且根据所检测的序列化事务状态标志来进行序列化事务映射表的相关操作。
其中,序列化事务状态标志的取值包括:开始、继续、结束、无效;第三步骤中,序列化事务映射表的相关操作包括:创建序列化事务映射表、查找序列化事务映射表、删除序列化事务映射记录。
具体而言,在第二步骤中,业务线程在发送多个消息中的第一个消息时,将序列化事务状态标志设置为开始;在发送多个消息中的末尾消息时,将序列化事务状态标志设置为结束;在发送多个消息中的其他消息时,将序列化事务状态标志设置为继续。
相应地,在第三步骤中,当多实例线程族的代理函数接收到第一消息时,检测到序列化事务状态标志为开始,根据负载均衡算法,分配给某个多实例线程来处理,并将第一消息发送给该多实例线程,同时根据序列化事务ID号、业务线程的编号、处理多实例线程编号在序列化事务映射表中建立一条映射记录。在多实例线程族的代理函数接收到其他消息时,检测到序列化事务状态标志为继续,根据序列化事务ID号和业务线程的编号来查找序列化事务映射表,查找到上次处理的多实例线程编号,并将其他消息发送给该多实例线程。在多实例线程族的代理函数接收到末尾消息时,检测到序列化事务状态标志为结束,查找序列化事务映射表,查找到多实例线程,并将该消息发送给查询到的多实例线程,然后从序列化事务映射表中删除该条序列化事务的映射记录。
此外,该方法可以进一步包括以下步骤:第四步骤,驱动线程向多实例线程族发起非序列化事务,其中,非序列化事务包括无序的多个消息;第五步骤,驱动线程将多个消息的序列化事务ID号设置为缺省值,并将序列化事务状态标志设置为无效;第六步骤,多实例线程族的代理函数检测序列化事务状态标志,并根据负载均衡算法来分配多个消息中的每个消息的处理线程。
通过上述技术方案,本发明实现了以下有益效果:应用了多实例线程并行运行的优势,提高了操作系统的调度利用率,并且不会出现序列化事务的乱序处理,从而保证了业务的正确实现。
附图说明
此处所说明的附图用来提供对本发明的进一步理解,构成本申请的一部分,本发明的示意性实施例及其说明用于解释本发明,并不构成对本发明的不当限定。在附图中:
图1是传统单核体系中,业务线程A向业务线程B发起一个序列化事务处理的示意图;
图2是多核体系中,未应用本发明方法时,业务线程A向多实例线程族B发起一个序列化事务处理发生失序的情况的示意图;
图3是示出根据本发明第一实施例的实现多实例线程序列化事务处理的方法的流程图;
图4是多核体系中,应用本发明方法时,业务线程A、业务线程B向多实例线程族C发送序列化事务消息,同时业务线程H向多实例线程族C发送了非序列化事务消息的示意图;以及
图5是示出根据本发明的序列化事务映射表的示意图。
具体实施方式
首先,简要说明本发明的原理。本发明利用多实例线程族(即,被多实例化了的线程)概念,采用多实例线程族主线程或者代理函数的方式来隔离多实例化具体实现,其他线程需要该多实例线程族来完成序列化事务处理时,在发送消息中带上序列化事务ID编号以及序列化事务状态标志,而多实例线程族主线程或者代理函数将为该序列化事务ID建立一个序列化事务映射表记录,保证后续序列化事务消息都发送到同一个多实例线程来处理,以此来实现序列化事务处理。
多实例线程族可以通过多实例线程族主线程或者代理函数两种方式来实现,由于主线程方式会带来更多的调度开销以及可能成为新的串行瓶颈,因此本发明实施例主要使用代理函数实现,为了便于说明,下文中提供的实施例中均以代理函数来描述。
本发明实施例中主要涉及通讯函数和多实例线程族代理函数。其中,通讯函数:需要增加序列化事务ID编号和序列化事务状态标志;多实例线程族代理函数:在其处理流程中增加序列化事务标志识别以及序列化事务映射表的操作,并且改进多实例处理线程的分配方法。
以下将参照附图来详细描述本发明的优选实施例。
第一实施例
在本实施例中,提供了一种实现多实例线程序列化事务处理的方法。如图3所示,该方法包括以下步骤:步骤S302,业务线程向多实例业务线程族发起序列化事务,其中,序列化事务包括有序的多个消息;步骤S304,业务线程在多个消息上设置序列化事务ID号和序列化事务状态标志;步骤S306,多实例业务线程族的代理函数检测序列化事务状态标志,并且根据所检测的序列化事务状态标志来进行序列化事务映射表的相关操作。
其中,在步骤S304中,序列化事务ID号可以是整个系统全局编号,也可以由每个进程或者线程独立编号,每个包含一系列有时序要求的处理的事务拥有一个序列化事务ID。序列化事务状态标志取值范围为开始、继续、结束、无效。
另外,在步骤S306中,序列化事务映射表的相关操作包括:创建序列化事务映射表、查找序列化事务映射表、删除序列化事务映射记录。。
在步骤S304中,业务线程在发送多个消息中的第一个消息时,将序列化事务状态标志设置为开始(即,表示通知多实例线程族代理函数,一个序列化事务开始了);在发送多个消息中的末尾消息时,将序列化事务状态标志设置为结束;在发送多个消息中的其他消息时,将序列化事务状态标志设置为继续。
相应地,在步骤S306中,当多实例线程族的代理函数接收到第一消息时,检测到序列化事务状态标志为开始,根据负载均衡算法,分配给多实例线程来处理,并将第一消息发送给该多实例线程,同时根据序列化事务ID号、业务线程的编号、处理多实例线程编号在序列化事务映射表中建立一条映射记录。此外,多实例线程族创建序列化事务映射表,其中,序列化事务映射表包括:序列化事务ID号、业务线程的编号、以及多实例线程的编号。其中,图5示出了上述序列化事务映射表。
另外,在步骤S306中,当多实例线程族的代理函数接收到其他消息时,检测到序列化事务状态标志为继续,根据序列化事务ID号和业务线程的编号来查找序列化事务映射表,查找到上次处理的多实例线程编号,并将其他消息发送给该多实例线程;当多实例线程族的代理函数接收到末尾消息时,检测到序列化事务状态标志为结束,查找序列化事务映射表,查找到多实例线程,并将该消息发送给查找到的多实例线程,然后从序列化事务映射表中删除该条序列化事务的映射记录。
另外,当有业务线程向多实例线程族发送非序列化事务消息时,该方法进一步包括以下步骤:
步骤S308,驱动线程向多实例线程族发起非序列化事务,其中,非序列化事务包括无序的多个消息;步骤S310,驱动线程将多个消息的序列化事务ID号设置为缺省值,并将序列化事务状态标志设置为无效;步骤S312,多实例线程族的代理函数检测序列化事务状态标志,并根据负载均衡算法来分配多个消息中的每个消息的处理线程。
值得注意的是,上述的步骤仅仅是示例性的,目的仅仅是便于说明和提供对本发明的透彻理解,本发明的处理方式不限于此,而是可以根据实践的需要进行各种改变。
以下将结合具体实例来描述本实施例中提供的方法。
如图4所示,首先,业务线程A向多实例业务线程族C发起一个序列化事务,包括有序的A、B、C、D消息。业务线程A为该序列化事务分配一个ID:101,在发送第一个消息A时,将序列化事务状态标志置为开始。在发送B、C消息时,将序列化事务状态标志置为继续,在发送D消息时,将序列化事务状态标志置为结束。这些消息都发送给多实例线程族C。
多实例线程族C的代理函数将检测消息中的序列化事务状态标志:当收到消息A时,其标志值为开始,则根据负载均衡算法,分配一个多实例线程C1来处理,将该消息发送给这个分配的线程C1,同时使用本次序列化事务ID号101、发送消息线程号A、接收消息多实例线程号C1,创建一个映射记录(如图5所示);多实例线程族C的代理函数收到消息B时,检测其标志值为继续,则不再根据负载均衡算法来分配多实例线程,而是根据发送线程号A、序列化事务ID号101去查找序列化事务映射表,找到以前分配的多实例处理线程C1,将本次消息发送给同一线程C1来处理;多实例线程族C的代理函数收到消息C时,处理方式同上;多实例线程族C的代理函数收到消息D时,检测其标志值为结束,则继续查找映射表,将本次消息发送给同一线程C1来处理,然后从序列化事务映射表中删除该条记录。
业务线程B发送给业务线程C的序列化事务消息处理方式同上。
驱动线程H发送给多实例线程族C的非序列化事务消息O、P、Q、R,将不会分配序列化事务ID,缺省值为0,序列化事务状态标志为无效。多实例线程族C的代理函数检测到此标志后,将根据负载均衡算法来分配每个消息的处理线程,这些消息将得到并行处理。
以上所述仅为本发明的优选实施例而已,并不用于限制本发明,对于本领域的技术人员来说,本发明可以有各种更改和变化。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
Claims (9)
1.一种实现多实例线程序列化事务处理的方法,其特征在于,包括以下步骤:
第一步骤,业务线程向多实例业务线程族发起序列化事务,其中,所述序列化事务包括有序的多个消息;
第二步骤,所述业务线程在所述多个消息上设置序列化事务ID号和序列化事务状态标志;以及
第三步骤,所述多实例业务线程族的代理函数检测所述序列化事务状态标志,并且根据所检测的序列化事务状态标志来进行序列化事务映射表的相关操作。
2.根据权利要求1所述的方法,其特征在于,所述序列化事务状态标志的取值包括:开始、继续、结束、无效。
3.根据权利要求2所述方法,其特征在于,在所述第三步骤中,所述序列化事务映射表的相关操作包括:创建序列化事务映射表、查找序列化事务映射表、删除序列化事务映射表记录。
4.根据权利要求3所述的方法,其特征在于,在所述第二步骤中,所述业务线程在发送所述多个消息中的第一个消息时,将所述序列化事务状态标志设置为开始;在发送所述多个消息中的末尾消息时,将所述序列化事务状态标志设置为结束;在发送所述多个消息中的其他消息时,将所述序列化事务状态标志设置为继续。
5.根据权利要求4所述的方法,其特征在于,在所述第三步骤中,当所述多实例线程族的所述代理函数接收到所述第一消息时,检测到所述序列化事务状态标志为开始,根据负载均衡算法,分配多实例线程,并将所述第一消息发送给所述多实例线程。
6.根据权利要求5所述的方法,其特征在于,所述多实例线程族创建序列化事务映射表,其中,所述序列化事务映射表包括:
所述序列化事务ID号、所述业务线程的编号、以及所述多实例线程的编号。
7.根据权利要求4所述的方法,其特征在于,在所述多实例线程族的代理函数接收到所述其他消息时,检测到所述序列化事务状态标志为继续,根据所述序列化事务ID号和所述业务线程的编号来查找所述序列化事务映射表,查找到所述多实例线程,并将所述其他消息发送给所述多实例线程。
8.根据权利要求4所述的方法,其特征在于,在所述多实例线程族的代理函数接收到所述末尾消息时,检测到所述序列化事务状态标志为结束,查找所述序列化事务映射表,查找到所述多实例线程,并将所述其他消息发送给所述多实例线程,然后从所述序列化事务映射表中删除所述序列化事务的映射记录。
9.根据权利要求1所述的方法,其特征在于,进一步包括以下步骤:
第四步骤,驱动线程向多实例线程族发起非序列化事务,其中,所述非序列化事务包括无序的多个消息;
第五步骤,所述驱动线程将所述多个消息的序列化事务ID号设置为缺省值,并将序列化事务状态标志设置为无效;
第六步骤,所述多实例线程族的代理函数检测所述序列化事务状态标志,并根据负载均衡算法来分配所述多个消息中的每个消息的处理线程。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CNB2007100005039A CN100517238C (zh) | 2007-01-05 | 2007-01-05 | 实现多实例线程序列化事务处理的方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CNB2007100005039A CN100517238C (zh) | 2007-01-05 | 2007-01-05 | 实现多实例线程序列化事务处理的方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN101216779A true CN101216779A (zh) | 2008-07-09 |
CN100517238C CN100517238C (zh) | 2009-07-22 |
Family
ID=39623218
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CNB2007100005039A Expired - Fee Related CN100517238C (zh) | 2007-01-05 | 2007-01-05 | 实现多实例线程序列化事务处理的方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN100517238C (zh) |
Cited By (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103020203A (zh) * | 2012-12-05 | 2013-04-03 | 北京奇虎科技有限公司 | 一种数据处理方法及装置 |
CN104506440A (zh) * | 2014-12-26 | 2015-04-08 | 成都致云科技有限公司 | 路由器的数据包发送方法和路由表修改方法 |
CN110262848A (zh) * | 2019-06-05 | 2019-09-20 | 阿里巴巴集团控股有限公司 | 在应用开发框架中加载应用程序实例的方法和装置 |
CN110457116A (zh) * | 2019-07-22 | 2019-11-15 | 阿里巴巴集团控股有限公司 | 处理事务请求的方法及装置 |
CN112835687A (zh) * | 2021-01-22 | 2021-05-25 | 恒生电子股份有限公司 | 一种计算机事务处理方法及系统 |
-
2007
- 2007-01-05 CN CNB2007100005039A patent/CN100517238C/zh not_active Expired - Fee Related
Cited By (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103020203A (zh) * | 2012-12-05 | 2013-04-03 | 北京奇虎科技有限公司 | 一种数据处理方法及装置 |
CN103020203B (zh) * | 2012-12-05 | 2017-04-12 | 北京奇虎科技有限公司 | 一种数据处理方法及装置 |
CN104506440A (zh) * | 2014-12-26 | 2015-04-08 | 成都致云科技有限公司 | 路由器的数据包发送方法和路由表修改方法 |
CN104506440B (zh) * | 2014-12-26 | 2017-12-26 | 成都致云科技有限公司 | 路由器的数据包发送方法和路由表修改方法 |
CN110262848A (zh) * | 2019-06-05 | 2019-09-20 | 阿里巴巴集团控股有限公司 | 在应用开发框架中加载应用程序实例的方法和装置 |
CN110262848B (zh) * | 2019-06-05 | 2022-03-04 | 创新先进技术有限公司 | 在应用开发框架中加载应用程序实例的方法和装置 |
CN110457116A (zh) * | 2019-07-22 | 2019-11-15 | 阿里巴巴集团控股有限公司 | 处理事务请求的方法及装置 |
CN110457116B (zh) * | 2019-07-22 | 2023-10-27 | 创新先进技术有限公司 | 处理事务请求的方法及装置 |
CN112835687A (zh) * | 2021-01-22 | 2021-05-25 | 恒生电子股份有限公司 | 一种计算机事务处理方法及系统 |
CN112835687B (zh) * | 2021-01-22 | 2023-05-26 | 恒生电子股份有限公司 | 一种计算机事务处理方法及系统 |
Also Published As
Publication number | Publication date |
---|---|
CN100517238C (zh) | 2009-07-22 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US6735717B1 (en) | Distributed computing system clustering model providing soft real-time responsiveness and continuous availability | |
US8270299B2 (en) | Communicator-based token/buffer management for eager protocol support in collective communication operations | |
CN100517238C (zh) | 实现多实例线程序列化事务处理的方法 | |
CN104050029B (zh) | 一种任务调度系统 | |
CN100488265C (zh) | 一种呼叫事件并发处理方法 | |
US6158006A (en) | Method for the coordination of parallel accesses of a plurality of processors to resource configurations | |
US20090083455A1 (en) | Centralized polling service | |
US20040003085A1 (en) | Active application socket management | |
US20100333094A1 (en) | Job-processing nodes synchronizing job databases | |
US7707181B2 (en) | System and method of distributing replication commands | |
CN110569312B (zh) | 一种基于gpu的大数据快速检索系统及其使用方法 | |
CN108415757A (zh) | 分布式事务处理方法及装置 | |
US20060156312A1 (en) | Method and apparatus for managing an event processing system | |
Fei et al. | FlexNFV: Flexible network service chaining with dynamic scaling | |
US8051417B2 (en) | Target thread selection in a multi-threaded process | |
CN107526622A (zh) | Linux的快速异常处理方法及装置 | |
US7774311B2 (en) | Method and apparatus of distributing data in partioned databases operating on a shared-nothing architecture | |
Vardoulakis et al. | Tebis: index shipping for efficient replication in lsm key-value stores | |
KR19990043986A (ko) | 업무 인계 시스템 | |
EP1891525A2 (en) | Techniques for handling lock-related inconsistencies | |
JP5707409B2 (ja) | 計算機 | |
US9015717B2 (en) | Method for processing tasks in parallel and selecting a network for communication | |
CN111131243B (zh) | Dpi系统策略处理方法及装置 | |
US20120191772A1 (en) | Processing a unit of work | |
CN110311868A (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 | ||
CF01 | Termination of patent right due to non-payment of annual fee | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20090722 Termination date: 20180105 |