CN102023899B - 多线程数据同步方法及装置 - Google Patents
多线程数据同步方法及装置 Download PDFInfo
- Publication number
- CN102023899B CN102023899B CN201010587888.5A CN201010587888A CN102023899B CN 102023899 B CN102023899 B CN 102023899B CN 201010587888 A CN201010587888 A CN 201010587888A CN 102023899 B CN102023899 B CN 102023899B
- Authority
- CN
- China
- Prior art keywords
- state
- network element
- thread
- taking
- synchronous
- 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.)
- Active
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/52—Program synchronisation; Mutual exclusion, e.g. by means of semaphores
Abstract
本发明提供了一种多线程数据同步方法及装置,在上述方法中,多线程池中的线程从同步队列中取出待同步网元对应的同步状态机的状态并执行;在取出的状态需要等待前台网元返回消息时,线程将取出的状态保存在存储模块中,并重新从同步队列中取出可用状态并执行;当取出的状态对应的网元返回消息时,线程从存储模块中提取取出的状态插入同步队列中。根据本发明提供的技术方案,线程在有可执行状态存在的情况下不会再空转等待前台返回消息,进而大大提高了数据同步的效率。
Description
技术领域
本发明涉及通信领域,具体而言,涉及一种多线程数据同步方法及装置。
背景技术
在无线通信中,网管系统(NMS)主要负责对网元设备(NE)进行管理,网管系统进一步包括:配置管理模块、性能管理模块、告警管理模块等。其中,配置管理模块是网管系统中最重要的模块之一,负责网元的数据设置。在配置管理模块中,配置好的数据需要从NMS发送到网元设备,这就需要建立网元设备和网管系统的连接并进行数据同步。利用数据同步技术可以实现不同数据库之间的数据交换,并确保所有数据库中数据的一致性。
目前,数据同步技术主要从降低系统与网络资源消耗、提高同步效率和保证同步数据正确性等方面考虑,其中,提高同步效率最主要的方法就是使用多线程并发技术,可以在同一时间内对多个网元进行数据同步。如图1所示,数据同步方法的主要步骤如下:
1、将所有要同步的网元信息插入一个同步任务队列,其中,上述网元信息主要包括:网元ID,网元类型等参数;
2、同时启动多个线程;
3、每个线程不断的从同步任务队列中获取网元信息,获取之后从同步任务队列中删除该网元;
4、线程根据网元信息,开始执行该类型网元对应的同步状态,如果遇到状态机的某个状态需要等待前台网元返回消息,则线程等待消息返回后继续执行;
5、线程执行到状态机的最后一个状态后,则一个同步任务执行完毕,该线程重新去查询同步任务队列,获取网元信息执行下一个同步任务。
此种同步方法是将多线程应用于数据同步的典型方法。通过增加了多个线程,每个线程执行一个同步状态机,每个状态机对应一个同步任务,这种方法虽然提高了同步效率,但是经过分析可以发现线程的利用率并不高。一般来说,原数据源与目标数据源的同步过程并不是简单的数据拷贝,从原数据源得到的数据还要经过一定的处理与再加工才能配置到目标数据源,因此一般的同步流程要分为多个阶段,每个阶段原数据源与目标数据源都有不同的交互应答消息以决定下一步应该执行的操作或动作。由于原数据源与目标数据源一般都处于不同的物理平台,相互之间的应答消息相对来说比较耗时,经过跟踪状态机的执行过程可以发现线程80%以上的时间都是在等待前台网元返回消息,此时如果同步任务队列中还有多个基站需要同步,那么线程的等待完全是没有效率的。
发明内容
针对相关技术中线程80%以上的时间都是在等待前台网元返回消息,导致线程的利用率不高的问题,本发明旨在提供一种多线程数据同步方法及装置,以解决上述问题至少之一。
根据本发明的一个方面,提供了一种多线程数据同步方法。
根据本发明的多线程数据同步方法包括:多线程池中的线程从同步队列中取出待同步网元对应的同步状态机的状态并执行;在取出的状态需要等待前台网元返回消息时,线程将取出的状态保存在存储模块中,并重新从同步队列中取出可用状态并执行;当取出的状态对应的网元返回消息时,线程从存储模块中提取取出的状态插入同步队列中。
根据本发明的另一方面,提供了一种多线程数据同步装置。
根据本发明的多线程数据同步装置包括:提取执行模块,用于从同步队列中取出待同步网元对应的同步状态机的状态并执行,并且在存储模块保存取出的状态之后,重新从同步队列中取出可用状态并执行;存储模块,用于在取出的状态需要等待前台网元返回消息时,保存取出的状态;第一插入模块,用于在取出的状态对应的网元返回消息时,从存储模块中提取取出的状态插入同步队列中。
通过本发明,在从同步队列中取出的状态需要等待前台网元返回消息时,线程将取出的状态保存在存储模块中,并重新从同步队列中取出可用状态并执行;当取出的状态对应的网元返回消息时,线程从存储模块中提取取出的状态插入同步队列中,解决了相关技术中线程80%以上的时间都是在等待前台网元返回消息,导致线程的利用率不高的问题,线程在有可执行状态存在的情况下不会再空转等待前台返回消息,进而大大提高了数据同步的效率。
附图说明
此处所说明的附图用来提供对本发明的进一步理解,构成本申请的一部分,本发明的示意性实施例及其说明用于解释本发明,并不构成对本发明的不当限定。在附图中:
图1是根据相关技术的多线程同步方法的示意图;
图2是根据本发明实施例的多线程同步方法的流程图;
图3是根据本发明优选实施例的多线程同步方法的示意图;
图4是根据本发明实施例的多线程同步装置的结构框图;
图5是根据本发明优选实施例的多线程同步装置的结构框图。
具体实施方式
下文中将参考附图并结合实施例来详细说明本发明。需要说明的是,在不冲突的情况下,本申请中的实施例及实施例中的特征可以相互组合。
图2是根据本发明实施例的多线程同步方法的流程图。如图2所示,该多线程同步方法主要包括以下处理:
步骤S202:多线程池中的线程从同步队列中取出待同步网元对应的同步状态机的状态并执行;
步骤S204:在取出的状态需要等待前台网元返回消息时,线程将取出的状态保存在存储模块中,并重新从同步队列中取出可用状态并执行;
步骤S206:当取出的状态对应的网元返回消息时,线程从存储模块中提取取出的状态插入同步队列中。
采用上述方法后,多线程池中的线程不再与同步任务一一对应,启动N个线程的情况下可以同时执行N+个同步任务,且线程在有可执行状态存在的情况下不会再空转等待前台返回消息,大大提高了数据同步的效率。
优选地,在执行上述步骤S202之前,需要执行以下处理:将全部待同步网元对应的同步状态机的初始状态插入同步队列中。
在优选实施过程中,可以把所有要同步的网元对应的同步状态机的初始状态(即S1),结合网元标识(ID)插入同步队列(例如,READY-STATE优先级队列),所有初始状态的优先级为0。
优选地,步骤S204中,线程将上述取出的状态保存在存储模块中可以进一步包括以下处理:线程将取出的状态对应的网元优先级增加1后,将取出的状态插入存储模块中保存的网元标识与状态的对应关系中。
优选地,步骤S206中,线程从存储模块中提取取出的状态包括以下处理:线程根据网元返回消息对应的网元标识,从对应关系中提取出取出的状态。
优选地,步骤S206中,线程将取出的状态插入同步队列中可以进一步包括以下处理:
(1)线程根据取出的状态获得前台网元返回消息的次数确定取出的状态对应的插入优先级;
例如,网元NE1的S2向S3转换时,只需要接收一条前台网元反馈的信息,而网元NE2的S2向S3转换时,需要接收到前台网元反馈的10条信息,则网元NE2的S2状态对应的插入优先级较高。
(2)线程根据插入优先级将取出的状态插入同步队列中。
其中,上述对应关系可以但不限于是UREADY-STATE哈希表。在优选实施过程中,当启动多线程池中的线程时,线程不断从READY-STATE队列中移出状态并执行状态动作,执行完成后状态迁移到状态机的下一个状态,如果该状态不需要等待前台网元返回消息,则线程接着执行该状态的动作,如果需要等待网元返回消息,则把该状态插入UREADY-STATE哈希表中,当前线程重新从READY-STATE队列中获取可用状态(即可以直接执行动作的状态,区别于需要等待前台返回消息的状态)来执行。
网元消息监听线程收到前台网元返回的消息后,根据网元ID从UREADY-STATE哈希表中检索出与网元ID对应的同步状态,插入READY-STATE队列中。其中,插入优先级由该同步状态获得前台网元返回消息的次数计算得出,这样可以保证先同步网元能优先完成。
优选地,在一个同步状态机对应的状态全部执行完毕时,线程重新从同步队列中取出可用状态并执行。
由于相关技术中线程与同步状态机之间的一一对应关系被打散,因此在某个线程执行完一个状态机的全部状态的动作后,还可以去执行另一个状态机的某个状态的动作。由此可得,启动N个线程的情况下可以同时执行N+个同步任务,大大提高了线程工作效率。
以下结合图3描述上述优选实施方式。
图3是根据本发明优选实施例的多线程同步方法的示意图。如图3所示,该多线程同步方法主要包括以下处理:
步骤S302:首先在后台建立一个优先级队列READY-STATE(即上述同步队列),该队列用来保存有多个可用状态(可以直接执行动作的状态,区别于需要等待前台返回消息的状态)以及多个需要等待前台返回消息的状态。
在具体实施过程中,为了使队列效率提高,可以使用堆结构。然后把所有网元的对应的同步状态机的初态实例化,并设置每个状态的优先级为0,插入队列中。
步骤S304:维护一个线程池,根据系统中可能同时同步的网元数量确定线程池中维护的线程个数。启动线程池中线程,每个线程都不断去检索上述READY-STATE队列,从中取出第一个可用状态执行其状态动作,执行完毕后,当前状态迁移为状态机的下一个状态,此时,如果当前状态不需要等待前台返回消息,则该线程继续执行当前状态,否则,该线程将状态对象内维护的网元优先级加1后插入到以网元ID为Key,以状态机状态为Value的哈希表UREADY-STATE(即上述存储模块中的对应关系示例)中。该线程返回,重新开始从READY-STATE队列中获取可用状态进行执行。
步骤S306:系统中启动一个网元返回消息监听线程,该线程根据前台网元返回的消息来更新网元状态。当有一个网元消息返回到系统中,监听线程根据网元ID,从UREADY-STATE哈希表中检索出对应的状态对象,将返回消息注入该状态对象,并将该状态对象从UREADY-STATE哈希表中移除,插入READY-STATE队列中。
步骤S308,当前状态为状态机最后一个状态时,当状态动作执行完毕后,该状态机对应网元的同步任务执行完毕。当前线程重新从READY-STATE队列中获取可用状态来执行。当READY-STATE队列与UREADY-STATE哈希表中都不存在状态对象时,所有网元同步完成。需要注意的是,在同步过程中,只有处于READY-STATE队列中状态机初始状态的网元可以被取消同步。
图4是根据本发明实施例的多线程同步装置的结构框图。如图4所示,该多线程同步装置主要包括:提取执行模块40、存储模块42和第一插入模块44。
提取执行模块40,用于从同步队列中取出待同步网元对应的同步状态机的状态并执行,并且在存储模块保存取出的状态之后,重新从同步队列中取出可用状态并执行;
存储模块42,用于在取出的状态需要等待前台网元返回消息时,保存取出的状态;
第一插入模块44,用于在取出的状态对应的网元返回消息时,从存储模块中提取取出的状态插入同步队列中。
采用上述装置,多线程池中的线程不再与同步任务一一对应,启动N个线程的情况下可以同时执行N+个同步任务,且线程在有可执行状态存在的情况下不会再空转等待前台返回消息,大大提高了数据同步的效率。因此,上述装置尤其适用于大量网元需要同步的场景。
优选地,如图5所示,上述装置还可以包括:第二插入模块46,用于将全部待同步网元对应的同步状态机的初始状态插入同步队列中,其中,初始状态对应的网元优先级均为0。
优选地,上述存储模块42,用于将取出的状态对应的网元优先级增加1后,将取出的状态插入其保存的网元标识与状态的对应关系中。
优选地,如图5所示,上述第一插入模块44可以进一步包括:提取子模块440,用于根据网元返回消息对应的网元标识,从对应关系中提取出取出的状态;确定子模块442,用于根据取出的状态获得前台网元返回消息的次数确定取出的状态对应的插入优先级;插入子模块444,用于根据插入优先级将取出的状态插入同步队列中。
优选地,上述提取执行模块40,还用于在一个同步状态机对应的状态全部执行完毕时,重新从同步队列中取出可用状态并执行。
需要注意的是,上述装置中各模块及其子模块相互结合的优选实施方式具体可以参见图2至图3的描述,此处不再赘述。
综上所述,借助本发明提供的上述实施例,将状态机的状态分离出来执行,每个状态机不再对应于一个固定线程,可以解决数据同步过程中线程大量时间用于等待前台网元消息返回的问题。相关技术方案启动N个线程的情况下最多只能同时执行N个网元数据同步,上述实施例提供的技术方案中没有这个限制,N个线程可以执行N+个同步任务,由于相关技术中线程的大部分时间都用在了等待网元返回消息上,本发明中线程没有这部分时间开销,只要队列中有可用状态,线程就会有效执行。因此,同样数量的同步任务,采用本发明提供的技术方案,只需要启动更少的线程就能超过现有方案的同步效率。
显然,本领域的技术人员应该明白,上述的本发明的各模块或各步骤可以用通用的计算装置来实现,它们可以集中在单个的计算装置上,或者分布在多个计算装置所组成的网络上,可选地,它们可以用计算装置可执行的程序代码来实现,从而可以将它们存储在存储装置中由计算装置来执行,或者将它们分别制作成各个集成电路模块,或者将它们中的多个模块或步骤制作成单个集成电路模块来实现。这样,本发明不限制于任何特定的硬件和软件结合。
以上仅为本发明的优选实施例而已,并不用于限制本发明,对于本领域的技术人员来说,本发明可以有各种更改和变化。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
Claims (9)
1.一种多线程数据同步方法,其特征在于,包括:
将全部待同步网元对应的同步状态机的初始状态插入同步队列中,所述初始状态对应的网元优先级均为0;
多线程池中的线程从同步队列中取出待同步网元对应的同步状态机的状态并执行;
在所述取出的状态需要等待前台网元返回消息时,所述线程将所述取出的状态保存在存储模块中,并重新从所述同步队列中取出可用状态并执行;
当所述取出的状态对应的网元返回消息时,所述线程从所述存储模块中提取所述取出的状态插入所述同步队列中。
2.根据权利要求1所述的方法,其特征在于,所述线程将所述取出的状态保存在存储模块中包括:
所述线程将所述取出的状态对应的网元优先级增加1后,将所述取出的状态插入所述存储模块中保存的网元标识与状态的对应关系中。
3.根据权利要求2所述的方法,其特征在于,所述线程从所述存储模块中提取所述取出的状态包括:
所述线程根据所述网元返回消息对应的网元标识,从所述对应关系中提取出所述取出的状态。
4.根据权利要求1所述的方法,其特征在于,所述线程将所述取出的状态插入所述同步队列中包括:
所述线程根据所述取出的状态获得前台网元返回消息的次数确定所述取出的状态对应的插入优先级;
所述线程根据所述插入优先级将所述取出的状态插入所述同步队列中。
5.根据权利要求1至4中任一项所述的方法,其特征在于,还包括:在一个所述同步状态机对应的状态全部执行完毕时,所述线程重新从所述同步队列中取出可用状态并执行。
6.一种多线程数据同步装置,其特征在于,包括:
提取执行模块,用于从同步队列中取出待同步网元对应的同步状态机的状态并执行,并且在存储模块保存所述取出的状态之后,重新从所述同步队列中取出可用状态并执行;
所述存储模块,用于在所述取出的状态需要等待前台网元返回消息时,保存所述取出的状态;
第一插入模块,用于在所述取出的状态对应的网元返回消息时,从所述存储模块中提取所述取出的状态插入所述同步队列中,其中,所述装置还包括:第二插入模块,用于将全部待同步网元对应的同步状态机的初始状态插入所述同步队列中,所述初始状态对应的网元优先级均为0。
7.根据权利要求6所述的装置,其特征在于,
所述存储模块,用于将所述取出的状态对应的网元优先级增加1后,将所述取出的状态插入其保存的网元标识与状态的对应关系中。
8.根据权利要求7所述的装置,其特征在于,所述第一插入模块包括:
提取子模块,用于根据所述网元返回消息对应的网元标识,从所述对应关系中提取出所述取出的状态;
确定子模块,用于根据所述取出的状态获得前台网元返回消息的次数确定所述取出的状态对应的插入优先级;
插入子模块,用于根据所述插入优先级将所述取出的状态插入所述同步队列中。
9.根据权利要求6至8中任一项所述的装置,其特征在于,
所述提取执行模块,还用于在一个所述同步状态机对应的状态全部执行完毕时,重新从所述同步队列中取出可用状态并执行。
Priority Applications (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201010587888.5A CN102023899B (zh) | 2010-12-14 | 2010-12-14 | 多线程数据同步方法及装置 |
PCT/CN2011/075699 WO2012079351A1 (zh) | 2010-12-14 | 2011-06-13 | 多线程数据同步方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201010587888.5A CN102023899B (zh) | 2010-12-14 | 2010-12-14 | 多线程数据同步方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN102023899A CN102023899A (zh) | 2011-04-20 |
CN102023899B true CN102023899B (zh) | 2014-11-05 |
Family
ID=43865221
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201010587888.5A Active CN102023899B (zh) | 2010-12-14 | 2010-12-14 | 多线程数据同步方法及装置 |
Country Status (2)
Country | Link |
---|---|
CN (1) | CN102023899B (zh) |
WO (1) | WO2012079351A1 (zh) |
Families Citing this family (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102023899B (zh) * | 2010-12-14 | 2014-11-05 | 中兴通讯股份有限公司 | 多线程数据同步方法及装置 |
CN102855249A (zh) * | 2011-06-30 | 2013-01-02 | 中兴通讯股份有限公司 | 网元日志同步方法和系统 |
CN109446268A (zh) * | 2018-10-09 | 2019-03-08 | 联动优势科技有限公司 | 一种数据同步方法及装置 |
CN109542982A (zh) * | 2018-11-28 | 2019-03-29 | 福建南威软件有限公司 | 数据库之间数据交换优先调度的方法 |
CN109510774B (zh) * | 2018-12-05 | 2022-08-02 | 浪潮电子信息产业股份有限公司 | 一种在数据同步过程中实现流量控制的方法 |
CN111666339B (zh) * | 2020-05-26 | 2023-10-24 | 和芯星通科技(北京)有限公司 | 一种多线程数据同步方法 |
CN112818054B (zh) * | 2020-10-15 | 2022-05-06 | 广州南天电脑系统有限公司 | 数据同步方法、装置、计算机设备和存储介质 |
Family Cites Families (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5485626A (en) * | 1992-11-03 | 1996-01-16 | International Business Machines Corporation | Architectural enhancements for parallel computer systems utilizing encapsulation of queuing allowing small grain processing |
CN100533392C (zh) * | 2005-03-30 | 2009-08-26 | 李晓波 | 一种同步处理方法及其装置 |
CN101159747B (zh) * | 2007-11-12 | 2010-09-01 | 中兴通讯股份有限公司 | 一种基于tcp并发多链路的通信系统及其方法 |
CN102023899B (zh) * | 2010-12-14 | 2014-11-05 | 中兴通讯股份有限公司 | 多线程数据同步方法及装置 |
-
2010
- 2010-12-14 CN CN201010587888.5A patent/CN102023899B/zh active Active
-
2011
- 2011-06-13 WO PCT/CN2011/075699 patent/WO2012079351A1/zh active Application Filing
Also Published As
Publication number | Publication date |
---|---|
CN102023899A (zh) | 2011-04-20 |
WO2012079351A1 (zh) | 2012-06-21 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN102023899B (zh) | 多线程数据同步方法及装置 | |
CN109918141B (zh) | 线程执行方法、装置、终端及存储介质 | |
US8930584B2 (en) | System and method for providing a linearizable request manager | |
CN104699218B (zh) | 一种任务管理方法及设备 | |
CN103036717A (zh) | 分布式数据的一致性维护系统和方法 | |
CN108776897B (zh) | 数据处理方法、装置、服务器及计算机可读存储介质 | |
CN108108463B (zh) | 基于时间片调度的同步任务处理方法及装置 | |
CN101772212B (zh) | 一种在移动终端上对多应用进行统一管理的方法及装置 | |
CN103092682A (zh) | 异步网络应用程序处理方法 | |
CN107491346A (zh) | 一种应用的任务处理方法、装置及系统 | |
CN102123084B (zh) | 云计算操作系统中资源调度方法及系统 | |
CN109032796B (zh) | 一种数据处理方法和装置 | |
CN101610316A (zh) | 手机应用程序的启动方法、装置和系统 | |
CN102081557A (zh) | 云计算操作系统中资源管理方法及系统 | |
CN104683472A (zh) | 一种支持大数据量的数据传输方法 | |
WO2009089746A1 (fr) | Procédé, dispositif et système de réalisation d'une tâche dans un environnement de grappes | |
CN108875381A (zh) | 一种支持内核模块隔离的消息服务模块的设计方案 | |
CN108108119B (zh) | 一种可扩展的存储集群事物的配置方法及装置 | |
CN104702534A (zh) | 一种实现多进程共享端口的数据处理的方法及装置 | |
CN108536541B (zh) | 流程引擎对象处理方法及装置 | |
CN101751292B (zh) | Atc系统中一种实现多机关键数据一致性功能的方法 | |
CN111767122A (zh) | 分布式任务调度管理方法和装置 | |
CN115658153A (zh) | 睡眠锁优化方法、装置、电子设备及存储介质 | |
CN114116158A (zh) | 一种基于sd-wan系统的任务调度方法及系统 | |
US20110214130A1 (en) | Data processing system, data processing method, and data processing program |
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 |