CN106155794B - 一种应用于多线程系统中的事件分配方法及装置 - Google Patents
一种应用于多线程系统中的事件分配方法及装置 Download PDFInfo
- Publication number
- CN106155794B CN106155794B CN201610579344.1A CN201610579344A CN106155794B CN 106155794 B CN106155794 B CN 106155794B CN 201610579344 A CN201610579344 A CN 201610579344A CN 106155794 B CN106155794 B CN 106155794B
- Authority
- CN
- China
- Prior art keywords
- event
- serialization
- queue
- buffer zone
- group
- 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/48—Program initiating; Program switching, e.g. by interrupt
- G06F9/4806—Task transfer initiation or dispatching
- G06F9/4843—Task transfer initiation or dispatching by program, e.g. task dispatcher, supervisor, operating system
-
- 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/48—Program initiating; Program switching, e.g. by interrupt
- G06F9/4806—Task transfer initiation or dispatching
- G06F9/4843—Task transfer initiation or dispatching by program, e.g. task dispatcher, supervisor, operating system
- G06F9/4881—Scheduling strategies for dispatcher, e.g. round robin, multi-level priority queues
-
- 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/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5083—Techniques for rebalancing the load in a distributed system
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Memory System Of A Hierarchy Structure (AREA)
Abstract
本发明涉及通信技术领域,尤其涉及一种应用于多线程系统中的事件分配方法及装置,用以解决现有技术中存在的无法同时实现负载均衡以及避免资源竞争的问题。本实施例中,在检测到任一事件被触发时,若事件为关联事件,则需要根据该事件是否为所属的串行化事件组中首个被触发的事件、以及相应串行化缓存区域的缓存状态以及工作状态,决定将该事件进行缓存或是直接分配到事件队列的队首或是分配到事件队列的队尾,若该事件为独立事件,则将该事件直接分配到事件队列的队尾,以等待被相应的线程调用。从而,使得各个事件能够被均衡分配调度,保证负载均衡性,而且,使得串行化事件能够按照业务逻辑关系串行化执行,避免资源竞争。
Description
技术领域
本发明涉及通信技术领域,尤其涉及一种应用于多线程系统中的事件分配方法及装置。
背景技术
随着计算机多核技术的发展,人们越来越多地使用多线程编程技术来充分发挥CPU的性能。在现有的多线程系统中,为了保证CPU的负载均衡,业务被切割成更小粒度的单位,例如以事件为单位在线程中执行。
现有的多线程系统中事件分配策略主要包括:静态绑定分配和动态绑定分配;其中:
参照图1(a)所示,为静态绑定分配方式对应的事件分配原理模型示意图,即事先将同一个或同一组资源相关的事件和指定的线程绑定,使这些资源相关的事件运行在同一个线程中。可见,通过将事件与线程静态绑定的方式使得同一资源相关的事件得以串行化执行,解决了存在业务逻辑的事件需要串行化执行而产生的资源竞争问题。然而,将事件与线程静态绑定之后,由于不同事件的运算量不同,线程之间是无法实现绝对负载均衡的,而且由于业务逻辑的影响,CPU间的并发度也会受到一定程度的影响。举例而言,事件A,B,C,D四个事件绑定到了同一个线程S1上,当前事件A正在被处理;若事件B与事件A存在业务逻辑(即需要与事件A串行),则事件B需要排队等待;事件C和事件D与事件A没有任何业务逻辑关联,因此完全可以在目前空闲的其它线程上立即得到处理,但是,实际上事件C和事件D也同样需要排队等待被线程S1执行。据此分析得知,由于线程数量对于系统性能的影响,系统中线程的数量不可能无限扩张,在保证资源相关的事件都被绑定到同一线程的情况下,某些相互之间资源不相关的事件(例如上述事件C和事件D与事件A并未存在业务逻辑关联)也会被绑定到同一线程。同时,由于线程间没有绝对的负载均衡,就可能出现一个线程正空闲时,一些本应被执行的事件却在另一个线程上进行不必要的排队等待而得不到执行。
参照图1(b)所示,为动态绑定分配方式对应的事件分配原理模型示意图,该方案采用了将事件和线程动态绑定的方式,事件通过排队等待的方式被随机的分配到线程上执行,解决了线程之间的负载均衡问题,最大化提升了系统运行效率。然而,事件和线程动态绑定的方式可能使得一些资源相关的事件(即存在业务逻辑关联而需要串行化执行的事件)被分派到不同的线程中执行,当这些事件在不同的线程中被同时执行时,就会产生资源竞争,从而增加开发复杂性。
综上所述,无论是静态绑定分配方案还是动态绑定分配方案,都无法同时实现线程的负载均衡以及避免资源竞争的目的,因此,亟需找到一种较佳的应用于多线程系统中的事件分配方案。
发明内容
本发明实施例提供一种应用于多线程系统中的事件分配方法及装置,用以解决现有技术中存在的无法同时实现负载均衡以及避免资源竞争的问题。
本发明实施例采用以下技术方案:
一种应用于多线程系统中的事件分配方法,所述方法包括:
在检测到任一事件被触发时,判断所述事件是否为关联事件;
若为关联事件,判断所述事件是否为所属的串行化事件组中首个被触发的事件;若为首个被触发的事件,则将所述事件分配到事件队列的队尾,若为非首个被触发的事件,则当缓存有与所述事件所属同一串行化事件组的事件,和/或,事件队列或线程中有与所述事件所属同一串行化事件组的事件正在被调度时,将所述事件缓存,当在所述事件被缓存之前缓存且与所述事件所属同一串行化事件组的事件被调度完成之后,将所述事件分配到所述事件队列的队首,否则,将所述事件直接分配到所述事件队列的队首;
若为独立事件,将所述事件直接分配到所述事件队列的队尾,以等待被相应的线程调用。
可选地,判断所述事件是否为关联事件,具体包括:
依次查询各个串行化缓存区域中是否记录有所述事件的标识,若查询成功,则确定所述事件为关联事件,且与记录有所述事件的标识的串行化缓存区域对应的串行化事件组相关联,否则,确定所述事件为独立事件。
可选地,所述串行化缓存区域通过以下方式创建:
分析待分配事件集合中各个事件之间的业务逻辑关系,将存在同一业务逻辑关系的各个事件关联至同一串行化事件组中;
为每个串行化事件组创建一个与之具有一一对应关系的串行化缓存区域;
其中,所述串行化缓存区域中记录有与之具有一一对应关系的串行化事件组中各个事件的标识;所述串行化缓存区域对应的串行化事件组中的任一事件从被分配到所述事件队列开始至被线程执行完成,所述串行化缓存区域处于工作状态,否则,所述串行化缓存区域处于休息状态。
可选地,判断所述事件是否为所属的串行化事件组中首个被触发的事件,具体包括:
查询所述事件所属的串行化缓存区域中是否有分配标记,若有分配标记,则表示所述事件是所述串行化缓存区域对应的串行化事件组中非首个被触发的事件,若没有分配标记,则表示所述事件是所述串行化缓存区域对应的串行化事件组中首个被触发的事件。
可选地,将所述事件进行缓存,当在所述事件被缓存之前缓存且与所述事件所属同一串行化事件组的全部事件被调度完成之后,将所述事件分配到事件队列的队首,具体包括:
将所述事件缓存到与所述事件所属的串行化事件组对应的串行化缓存区域;
在所述串行化缓存区域处于休息状态且所述串行化缓存区域中未存储有在所述事件被缓存的时刻之前进行缓存的事件时,将所述事件分配到所述事件队列的队首。
一种应用于多线程系统中的事件分配装置,包括:
判断单元,用于在检测到任一事件被触发时,判断所述事件是否为关联事件;以及,在所述判断单元判断所述事件为关联事件后,进一步判断所述事件是否为所属的串行化事件组中首个被触发的事件;以及,在所述判断单元判断所述事件为非首个被触发的事件时,进一步判断是否已缓存有与所述事件所属同一串行化事件组的事件,以及事件队列或线程中是否有与所述事件所属同一串行化事件组的事件正在被调度;
处理单元,用于在所述判断单元判断所述事件为独立事件时,将所述事件直接分配到事件队列的队尾,以等待被相应的线程调用;以及,用于在所述判断单元判断所述事件为首个被触发的事件时,将所述事件分配到所述事件队列的队尾;以及,用于在所述判断单元判断所述事件为非首个被触发的事件,且缓存有与所述事件所属同一串行化事件组的事件,和/或,事件队列或线程中有与所述事件所属同一串行化事件组的事件正在被调度时,将所述事件缓存,当在所述事件被缓存之前缓存且与所述事件所属同一串行化事件组的全部事件被调度完成之后,将所述事件分配到事件队列的队首;以及,用于在所述判断单元判断所述事件为非首个被触发的事件,且未缓存有与所述事件所属同一串行化事件组的事件,以及事件队列或线程中没有与所述事件所属同一串行化事件组的事件正在被调度时,将所述事件直接分配到所述事件队列的队首。
可选地,所述判断单元在判断所述事件是否为关联事件时,具体用于:
依次查询各个串行化缓存区域中是否记录有所述事件的标识,若查询成功,则确定所述事件为关联事件,且与记录有所述事件的标识的串行化缓存区域对应的串行化事件组相关联,否则,确定所述事件为独立事件。
可选地,所述串行化缓存区域通过以下方式创建:
分析待分配事件集合中各个事件之间的业务逻辑关系,将存在同一业务逻辑关系的各个事件关联至同一串行化事件组中;
为每个串行化事件组创建一个与之具有一一对应关系的串行化缓存区域;
其中,所述串行化缓存区域中记录有与之具有一一对应关系的串行化事件组中各个事件的标识;所述串行化缓存区域对应的串行化事件组中的任一事件从被分配到所述事件队列开始至被线程执行完成,所述串行化缓存区域处于工作状态,否则,所述串行化缓存区域处于休息状态。
可选地,所述判断单元在判断所述事件是否为所属的串行化事件组中首个被触发的事件时,具体用于:
查询所述事件所属的串行化缓存区域中是否有分配标记,若有分配标记,则表示所述事件并不是所述串行化缓存区域对应的串行化事件组中首个被触发的事件,若没有分配标记,则表示所述事件是所述串行化缓存区域对应的串行化事件组中首个被触发的事件。
可选地,所述处理单元在将所述事件进行缓存,当在所述事件被缓存之前缓存且与所述事件所属同一串行化事件组的全部事件被调度完成之后,将所述事件分配到事件队列的队首时,具体用于:
将所述事件缓存到与所述事件所属的串行化事件组对应的串行化缓存区域;
在所述串行化缓存区域处于休息状态且所述串行化缓存区域中未存储有在所述事件被缓存的时刻之前进行缓存的事件时,将所述事件分配到所述事件队列的队首。
本发明实施例应用于多线程系统中的事件分配方案中,基于动态绑定下的事件队列的排队等待分配机制,通过在多线程系统中预先创建用于控制、缓存具有同一业务逻辑关系的事件的串行化缓存区域,在检测到任一事件被触发时,首先,判断该事件是否为关联事件,若为关联事件,判断该事件是否为所属的串行化事件组中首个被触发的事件,若为首个被触发的事件,则将事件分配到事件队列的队尾,让该事件在事件队列中排队等待被相应空闲线程调用;若为非首个被触发的事件,则当缓存有与所述事件所属同一串行化事件组的事件,和/或,事件队列或线程中有与所述事件所属同一串行化事件组的事件正在被调度时,表明当前与该事件具有串行化逻辑关联的事件正在事件队列中排队或者正在线程中被调用,为了保证串行化执行时不会发生资源竞争,需要将该事件缓存,当在事件被缓存之前缓存且与该事件所属同一串行化事件组的事件被调度完成之后,将事件分配到事件队列的队首,以使得属于同一串行化事件组的事件尽早以串行化的顺序被调用;若事件为非首个被触发的事件,且未缓存有与事件所属同一串行化事件组的事件,以及事件队列或线程中没有与事件所属同一串行化事件组的事件正在被调度,此时,表明在该事件被调度之前的所有事件已经被调度完成,该事件无需被缓存等待,而是直接被分配到事件队列的队首,若不关联,表明该事件为独立事件,将该事件直接分配到事件队列的队尾,以等待被相应的线程调用。由于该方案基于动态绑定下的事件队列的排队等待分配机制,通过在多线程系统中预先创建用于控制、缓存具有同一业务逻辑关系的事件的串行化缓存区域,使得各个事件能够被均衡的分配调度,保证了负载的均衡性,而且,使得串行化事件能够按照业务逻辑关系串行化执行,避免了多线程系统中资源的竞争,有效降低了编程的复杂性,提升了执行效率。
附图说明
为了更清楚地说明本发明实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简要介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域的普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
图1(a)为静态绑定分配方式对应的事件分配原理模型示意图;
图1(b)为动态绑定分配方式对应的事件分配原理模型示意图;
图2为本发明实施例所涉及的事件分配原理模型示意图;
图3为本发明提供的应用于多线程系统中的事件分配方法的步骤流程图;
图4为本发明提供的具体实例所涉及的事件分配示意图。
图5为本发明提供的应用于多线程系统中的事件分配装置结构示意图。
具体实施方式
为了使本发明的目的、技术方案和优点更加清楚,下面将结合附图对本发明作进一步地详细描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其它实施例,都属于本发明保护的范围。
首先,介绍本发明实施例所涉及的方案所适用的应用场景,参照图2所示,待分配事件集合中的多个事件并行排列等待被触发,而并没有严格限定被触发的先后顺序,可以是随机触发任一事件。这些事件被触发后,必须经过事件队列才可以被分配到空闲的线程执行。此外,本发明不同于现有技术的是,在事件队列所在存储区域以外的空间,预先创建串行化缓存区域,用于对所述同一串行化事件组的事件进行控制分配,以实现负载均衡的同时,避免资源竞争。
下面通过具体的实施例对本发明所涉及的技术方案进行详细描述,本发明包括但并不限于以下实施例。
如图3所示,为本发明实施例中一种应用于多线程系统中的事件分配方法的步骤流程图,该方法主要包括以下步骤:
步骤31:在检测到任一事件被触发时,判断所述事件是否为关联事件;若为关联事件,则执行步骤32,否则,跳转至步骤33。
可选地,在本发明实施例的步骤31中,判断所述事件是否为关联事件,具体执行为:依次查询各个串行化缓存区域中是否记录有所述事件的标识,若查询成功,则确定所述事件为关联事件,且与记录有所述事件的标识的串行化缓存区域对应的串行化事件组相关联,否则,确定所述事件为独立事件。
步骤32:判断该事件是否为所属的串行化事件组中首个被触发的事件,若为首个被触发的事件,则执行步骤33,否则,执行步骤34。
可选地,在本发明实施例的步骤32中,判断该事件是否为所述串行化缓存区域对应的串行化事件组中首个被触发的事件,具体执行为:查询所述串行化缓存区域中是否有分配标记,若有分配标记,则表示所述事件并不是所述串行化缓存区域对应的串行化事件组中首个被触发的事件,若没有分配标记,则表示所述事件是所述串行化缓存区域对应的串行化事件组中首个被触发的事件。例如,可以在串行化缓存区域创建的同时,生成一张分配列表,若相应事件被分配至事件队列,则该分配列表中对应该事件的位置就会生成永久性的分配标记。该分配标记在下次创建新的串行化缓存区域的时候才会连同其所在的串行化缓存区域一起被清除或者替换。
步骤33:将所述事件直接分配到事件队列的队尾,以等待被相应线程调用。
步骤34:判断是否满足:缓存有与该事件所属同一串行化事件组的事件,和/或,事件队列或线程中有与所述事件所属同一串行化事件组的事件正在被调度,若满足,则执行步骤35,否则,执行步骤36。
具体地,可以通过查询与该事件所属同一串行化事件组对应的串行化缓存区域中是否有与该事件所属同一串行化事件组的事件,若有,则无论事件队列或线程中是否有与该事件所属同一串行化事件组的事件正在被调度,都需要执行步骤35;另外,可以通过查询与该事件所属同一串行化事件组对应的串行化缓存区域的状态,若为工作状态,无论该串行化缓存区域中是否存储有事件,都需要执行步骤35;只有当同时满足上述两个条件,即没有缓存有与该事件所属同一串行化事件组的事件,且事件队列或线程中没有与所述事件所属同一串行化事件组的事件正在被调度,才需要执行步骤36。
步骤35:将所述事件缓存,当在所述事件被缓存之前缓存且与所述事件所属同一串行化事件组的事件被调度完成之后,将所述事件分配到所述事件队列的队首。
其中,该步骤35具体执行为:将所述事件缓存到与所述事件所属的串行化事件组对应的串行化缓存区域;在所述串行化缓存区域处于休息状态且所述串行化缓存区域中未存储有在所述事件被缓存的时刻之前进行缓存的事件时,将所述事件分配到所述事件队列的队首。
步骤36:将所述事件直接分配到所述事件队列的队首。
可选地,在本发明实施例中,串行化缓存区域可以通过以下方式创建:分析待分配事件集合中各个事件之间的业务逻辑关系,并将存在同一业务逻辑关系的多个事件关联至一个串行化事件组中;为每个串行化事件组创建一个与之具有一一对应关系的串行化缓存区域;其中,所述串行化缓存区域对应的串行化事件组中的任一事件从被分配到所述事件队列开始至被线程执行完成,所述串行化缓存区域处于工作状态;当所述串行化缓存区域对应的串行化事件组中未有事件被线程执行时,所述串行化缓存区域处于休息状态。
在本发明所涉及的方案中,在创建串行化缓存区域之后,需要将与每个串行化缓存区域具有一一对应关系的串行化事件组中的事件与相应的串行化缓存区域建立关联,具体地可以通过事件注册到串行化缓存区域中的方式或者通过在事件中记录串行化缓存区域的标识的方式实现。
假设,待分配事件集合中包含事件a、事件b、事件c、事件d以及事件e,若确定事件a与事件b之间具有业务逻辑关系1,事件c和事件d之间具有业务逻辑关系2,事件e与其他任何事件之间没有业务逻辑关系,那么,可以确定事件a与事件b为一个串行化事件组,事件c和事件d为另一个串行化事件组。用户可以按照串行化缓存区域的创建方式,创建串行化缓存区域1和串行化缓存区域2,并将事件a和事件b注册到串行化缓存区域1中,将事件c和事件d注册到串行化缓存区域2中。若采用注册的方式,则串行化缓存区域1中会分别记录有事件a和事件b的标识,或者与事件a、事件b相关的属性信息;串行化缓存区域2中也会相应记录有时间c和事件d的标识,或者与事件c、事件d相关的属性信息。此外,用户还可以通过在与串行化缓存区域1具有一一对应关系的事件a和事件b中分别记录串行化缓存区域1的标识,以及在与串行化缓存区域2具有一一对应关系的事件c和事件d中分别记录串行化缓存区域2的标识。
需要说明的是,以上串行化缓存区域的创建以及关联关系的建立均发生在待分配事件集合中的事件被触发之前,其具体的实现方式可以是人工设置,也可以是通过植入的算法进行自动设置,本发明并不对此进行具体限定。
此外,在本发明实施例中,在对被触发的事件进行关联性判断时,除了上述提到的方式外,还可以通过以下方式实现:
在创建串行化缓存区域之后,存在同一业务逻辑关系的各个事件分别记录有相应串行化缓存区域的标识;那么,步骤31具体可以执行为:查询该事件中是否记录有任一串行化缓存区域的标识,若查询成功,则确定该事件为关联事件,且与查询到的标识所属的串行化缓存区域对应的串行化事件组相关联,否则,确定该事件为独立事件。
以下通过具体的实例对本发明所涉及的事件分配方案进行详细介绍。
参照图4所示,假设,目前待分配事件集合中有7个事件处于待分配状态,即等待调度。其中,事件A、事件B和事件C在业务逻辑上具有关联,需要被串行化执行,事件D和事件E在业务逻辑具有另外一种关联,也需要被串行化执行,需要说明的是,事件A、事件B、事件C作为一个串行化事件组与事件D、事件E作为一个串行化事件组之间没有串行化要求,而事件F和该待分配事件集合中的其他任何事件之间都没有业务逻辑关联,因此,不需要与任一事件串行化执行。因此,根据分析结果可创建两个串行化缓存区域,将事件A事件B和事件C的标识记录到串行化缓存区域3中,将事件D和事件E的标识记录到串行化缓存区域4中。
当系统调度开始运行时,以下面示例进行具体说明:
示例1:检测到事件A被触发,通过查询各个串行化缓存区域中记录的标识的方式确定该事件A与串行化缓存区域1有关联,首先,查询事件A所属的串行化缓存区域1中是否有分配标记,查询结果为无,确定该事件A为所属的串行化事件组中首个被触发的事件。那么,可以直接将该事件A分配到事件队列的队尾,若该队列此时并没有其他事件,该事件A可以直接被相应的空闲线程调用执行,反之,需要排队等待。
需要说明的是,串行化缓存区域1在事件A被分配到事件队列开始进入工作状态,直至该事件A被相应线程执行完成为止。在串行化缓存区域1处于工作状态时,若与该串行化缓存区域1对应的串行化事件组中除事件A以外的其他事件被触发后,均无法被直接分配至事件队列,而是需要被缓存到该串行化缓存区域1中等待被分配。
示例2:基于上述示例1的执行,后续检测到事件B被触发,且确定该事件B也与串行化缓存区域1有关联,在此之前,只有事件A被触发,且已经被分配至事件队列中等待被线程调用执行,因此,串行化缓存区域1中并没有缓存其他事件,那么,可以根据查询到的分配标记(在每个被缓存的事件被分配到事件队列之后,就会在相应的串行化缓存区域中作分配标记,表示该事件已经曾经被缓存在该空间且已经被分配到事件队列或已经被线程调用),确定该事件并不是串行化缓存区域1对应的串行化事件组中首个被触发的事件;进一步检测该串行化缓存区域1是否处于工作状态,若处于工作状态,表示此时事件A还处于等待被执行或被执行中,事件B不能被直接分配到事件队列中(而本发明所涉及的所有事件都需要经过事件队列的排队才可以被相应线程调用执行),只能被缓存到串行化缓存区域1中;若处于休息状态,表示此时事件A已经被执行完成,那么,进一步检测串行化缓存区域1中是否还缓存有其他事件,显然没有,则可以将事件B直接分配到事件队列的队首,以便于属于同一串行化事件组的事件能够被尽快以串行化的方式执行。
示例3:基于示例2,接着,检测到事件C被触发,且确定该事件C也与串行化缓存区域1有关联,其实,各个事件被执行所需的时间并不确定,因此,在事件C被触发后,需要先检测串行化缓存区域1中是否缓存有事件,若缓存有事件,则表明当前时刻有与之具有业务逻辑关系的事件被执行,且有与之具有业务逻辑关系的事件被缓存在串行化缓存区域1中,该事件C需要缓存到串行化缓存区域1中,并按照进入该串行化缓存区域1的顺序等待被分配。例如,若该串行化缓存区域1中缓存有事件B,则当事件A执行完成之后,该串行化缓存区域1切换至休息状态,可以将事件B分配至事件队列的队首,以保证该事件B在事件A执行完成之后能够及时被相应线程执行,尽可能减少事件B的延迟执行,而事件C需要在事件B执行完成之后,即串行化缓存区域1下一次切换至休息状态时,才可以被分配至事件队列的队首;若未缓存有事件,则可以按照示例2中的方案执行,在此不做赘述。
在此需要说明的是,基于示例1或示例2或示例3,检测到事件D被触发,且确定该事件D与串行化缓存区域2有关联,那么,该事件D可按照上述事件A的分配方式进行,各个串行化缓存区域之间的调度分配方案并不相互影响,各自按照上述涉及的方案执行。而对于与串行化缓存区域不相关联的事件F,则直接将该事件F分配到事件队列的队尾,以等待被相应线程调度执行即可。如此循环,使得无串行化要求的事件第一时间得到调度执行以保证事件执行效率,同时,有串行化要求的事件在无需其他同步机制的情况下得以串行化执行,避免了资源竞争。
通过上述所涉及的实施例可知,本发明基于动态绑定下的事件队列的排队等待分配机制,通过在多线程系统中预先创建用于控制、缓存具有同一业务逻辑关系的事件的串行化缓存区域,使得各个事件能够被均衡的分配调度,保证了负载的均衡性,而且,使得串行化事件能够按照业务逻辑关系串行化执行,避免了多线程系统中资源的竞争,有效降低了编程的复杂性,提升了执行效率。
与上述提供的一种应用于多线程系统中的事件分配方法属于同一发明构思,本发明实施例还提供了一种应用于多线程系统中的事件分配装置。
如图5所示,为本发明实施例提供的应用于多线程系统中的事件分配装置结构示意图,该装置主要包括:
判断单元51,用于在检测到任一事件被触发时,判断所述事件是否为关联事件;以及,在所述判断单元判断所述事件为关联事件后,进一步判断所述事件是否为所属的串行化事件组中首个被触发的事件;以及,在所述判断单元判断所述事件为非首个被触发的事件时,进一步判断是否已缓存有与所述事件所属同一串行化事件组的事件,以及事件队列或线程中是否有与所述事件所属同一串行化事件组的事件正在被调度;
处理单元52,用于在判断单元51判断事件为独立事件时,将事件直接分配到事件队列的队尾,以等待被相应的线程调用;以及,用于在判断单元51判断事件为首个被触发的事件时,将事件分配到事件队列的队尾;以及,用于在判断单元51判断事件为非首个被触发的事件,且缓存有与事件所属同一串行化事件组的事件,和/或,事件队列或线程中有与事件所属同一串行化事件组的事件正在被调度时,将事件缓存,当在事件被缓存之前缓存且与事件所属同一串行化事件组的全部事件被调度完成之后,将事件分配到事件队列的队首;以及,用于在判断单元51判断事件为非首个被触发的事件,且未缓存有与事件所属同一串行化事件组的事件,以及事件队列或线程中没有与事件所属同一串行化事件组的事件正在被调度时,将事件直接分配到事件队列的队首。
可选地,判断单元51在判断所述事件是否为关联事件时,具体用于:依次查询各个串行化缓存区域中是否记录有所述事件的标识,若查询成功,则确定所述事件为关联事件,且与记录有所述事件的标识的串行化缓存区域对应的串行化事件组相关联,否则,确定所述事件为独立事件。
可选地,串行化缓存区域通过以下方式创建:分析待分配事件集合中各个事件之间的业务逻辑关系,将存在同一业务逻辑关系的各个事件关联至同一串行化事件组中;为每个串行化事件组创建一个与之具有一一对应关系的串行化缓存区域;其中,所述串行化缓存区域中记录有与之具有一一对应关系的串行化事件组中各个事件的标识;所述串行化缓存区域对应的串行化事件组中的任一事件从被分配到所述事件队列开始至被线程执行完成,所述串行化缓存区域处于工作状态,否则,所述串行化缓存区域处于休息状态。
可选地,判断单元51在判断事件是否为所属的串行化事件组中首个被触发的事件时,具体用于:查询事件所属的串行化缓存区域中是否有分配标记,若有分配标记,则表示事件并不是所述串行化缓存区域对应的串行化事件组中首个被触发的事件,若没有分配标记,则表示事件是所述串行化缓存区域对应的串行化事件组中首个被触发的事件。
可选地,处理单元52在将事件进行缓存,当在事件被缓存之前缓存且与事件所属同一串行化事件组的全部事件被调度完成之后,将事件分配到事件队列的队首时,具体用于:将事件缓存到与事件所属的串行化事件组对应的串行化缓存区域;在串行化缓存区域处于休息状态且串行化缓存区域中未存储有在事件被缓存的时刻之前进行缓存的事件时,将事件分配到事件队列的队首。
本领域内的技术人员应明白,本发明的实施例可提供为方法、系统、或计算机程序产品。因此,本发明可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本发明可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本发明是参照根据本发明实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
尽管已描述了本发明的优选实施例,但本领域内的技术人员一旦得知了基本创造性概念,则可对这些实施例作出另外的变更和修改。所以,所附权利要求意欲解释为包括优选实施例以及落入本发明范围的所有变更和修改。
显然,本领域的技术人员可以对本发明进行各种改动和变型而不脱离本发明的精神和范围。这样,倘若本发明的这些修改和变型属于本发明权利要求及其等同技术的范围之内,则本发明也意图包含这些改动和变型在内。
Claims (10)
1.一种应用于多线程系统中的事件分配方法,其特征在于,待分配事件集合中的多个事件并行排列等待被触发,并没有限定被触发的先后顺序,随机触发任一事件,所述方法包括:
在检测到任一事件被触发时,判断所述事件是否为关联事件;
若为关联事件,判断所述事件是否为所属的串行化事件组中首个被触发的事件;若为首个被触发的事件,则将所述事件分配到事件队列的队尾;若为非首个被触发的事件,则当缓存有与所述事件所属同一串行化事件组的事件,和/或,事件队列或线程中有与所述事件所属同一串行化事件组的事件正在被调度时,将所述事件缓存,当在所述事件被缓存之前缓存且与所述事件所属同一串行化事件组的事件被调度完成之后,将所述事件分配到所述事件队列的队首;当未缓存有与所述事件所属同一个串行化事件组的事件,以及事件队列或线程中没有与所述事件所属同一个串行化事件组的事件正在被调度时,将所述事件直接分配到所述事件队列的队首;
若为独立事件,将所述事件直接分配到所述事件队列的队尾,以等待被相应的线程调用。
2.如权利要求1所述的方法,其特征在于,判断所述事件是否为关联事件,具体包括:
依次查询各个串行化缓存区域中是否记录有所述事件的标识,若查询成功,则确定所述事件为关联事件,且与记录有所述事件的标识的串行化缓存区域对应的串行化事件组相关联,否则,确定所述事件为独立事件。
3.如权利要求2所述的方法,其特征在于,所述串行化缓存区域通过以下方式创建:
分析待分配事件集合中各个事件之间的业务逻辑关系,将存在同一业务逻辑关系的各个事件关联至同一串行化事件组中;
为每个串行化事件组创建一个与之具有一一对应关系的串行化缓存区域;
其中,所述串行化缓存区域中记录有与之具有一一对应关系的串行化事件组中各个事件的标识;所述串行化缓存区域对应的串行化事件组中的任一事件从被分配到所述事件队列开始至被线程执行完成,所述串行化缓存区域处于工作状态,否则,所述串行化缓存区域处于休息状态。
4.如权利要求2或3所述的方法,其特征在于,判断所述事件是否为所属的串行化事件组中首个被触发的事件,具体包括:
查询所述事件所属的串行化缓存区域中是否有分配标记,若有分配标记,则表示所述事件是所述串行化缓存区域对应的串行化事件组中非首个被触发的事件,若没有分配标记,则表示所述事件是所述串行化缓存区域对应的串行化事件组中首个被触发的事件。
5.如权利要求2或3所述的方法,其特征在于,将所述事件进行缓存,当在所述事件被缓存之前缓存且与所述事件所属同一串行化事件组的全部事件被调度完成之后,将所述事件分配到事件队列的队首,具体包括:
将所述事件缓存到与所述事件所属的串行化事件组对应的串行化缓存区域;
在所述串行化缓存区域处于休息状态且所述串行化缓存区域中未存储有在所述事件被缓存的时刻之前进行缓存的事件时,将所述事件分配到所述事件队列的队首。
6.一种应用于多线程系统中的事件分配装置,其特征在于,待分配事件集合中的多个事件并行排列等待被触发,并没有限定被触发的先后顺序,随机触发任一事件,包括:
判断单元,用于在检测到任一事件被触发时,判断所述事件是否为关联事件;以及,在所述判断单元判断所述事件为关联事件后,进一步判断所述事件是否为所属的串行化事件组中首个被触发的事件;以及,在所述判断单元判断所述事件为非首个被触发的事件时,进一步判断是否已缓存有与所述事件所属同一串行化事件组的事件,以及事件队列或线程中是否有与所述事件所属同一串行化事件组的事件正在被调度;
处理单元,用于在所述判断单元判断所述事件为独立事件时,将所述事件直接分配到事件队列的队尾,以等待被相应的线程调用;以及,用于在所述判断单元判断所述事件为首个被触发的事件时,将所述事件分配到所述事件队列的队尾;以及,用于在所述判断单元判断所述事件为非首个被触发的事件,且缓存有与所述事件所属同一串行化事件组的事件,和/或,事件队列或线程中有与所述事件所属同一串行化事件组的事件正在被调度时,将所述事件缓存,当在所述事件被缓存之前缓存且与所述事件所属同一串行化事件组的全部事件被调度完成之后,将所述事件分配到事件队列的队首;以及,用于在所述判断单元判断所述事件为非首个被触发的事件,且未缓存有与所述事件所属同一串行化事件组的事件,以及事件队列或线程中没有与所述事件所属同一串行化事件组的事件正在被调度时,将所述事件直接分配到所述事件队列的队首。
7.如权利要求6所述的装置,其特征在于,所述判断单元在判断所述事件是否为关联事件时,具体用于:
依次查询各个串行化缓存区域中是否记录有所述事件的标识,若查询成功,则确定所述事件为关联事件,且与记录有所述事件的标识的串行化缓存区域对应的串行化事件组相关联,否则,确定所述事件为独立事件。
8.如权利要求7所述的装置,其特征在于,所述串行化缓存区域通过以下方式创建:
分析待分配事件集合中各个事件之间的业务逻辑关系,将存在同一业务逻辑关系的各个事件关联至同一串行化事件组中;
为每个串行化事件组创建一个与之具有一一对应关系的串行化缓存区域;
其中,所述串行化缓存区域中记录有与之具有一一对应关系的串行化事件组中各个事件的标识;所述串行化缓存区域对应的串行化事件组中的任一事件从被分配到所述事件队列开始至被线程执行完成,所述串行化缓存区域处于工作状态,否则,所述串行化缓存区域处于休息状态。
9.如权利要求7或8所述的装置,其特征在于,所述判断单元在判断所述事件是否为所属的串行化事件组中首个被触发的事件时,具体用于:
查询所述事件所属的串行化缓存区域中是否有分配标记,若有分配标记,则表示所述事件并不是所述串行化缓存区域对应的串行化事件组中首个被触发的事件,若没有分配标记,则表示所述事件是所述串行化缓存区域对应的串行化事件组中首个被触发的事件。
10.如权利要求7或8所述的装置,其特征在于,所述处理单元在将所述事件进行缓存,当在所述事件被缓存之前缓存且与所述事件所属同一串行化事件组的全部事件被调度完成之后,将所述事件分配到事件队列的队首时,具体用于:
将所述事件缓存到与所述事件所属的串行化事件组对应的串行化缓存区域;
在所述串行化缓存区域处于休息状态且所述串行化缓存区域中未存储有在所述事件被缓存的时刻之前进行缓存的事件时,将所述事件分配到所述事件队列的队首。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201610579344.1A CN106155794B (zh) | 2016-07-21 | 2016-07-21 | 一种应用于多线程系统中的事件分配方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201610579344.1A CN106155794B (zh) | 2016-07-21 | 2016-07-21 | 一种应用于多线程系统中的事件分配方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN106155794A CN106155794A (zh) | 2016-11-23 |
CN106155794B true CN106155794B (zh) | 2019-11-19 |
Family
ID=58059835
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201610579344.1A Active CN106155794B (zh) | 2016-07-21 | 2016-07-21 | 一种应用于多线程系统中的事件分配方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN106155794B (zh) |
Families Citing this family (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107369088B (zh) * | 2017-07-19 | 2021-05-07 | 中国银行股份有限公司 | 帐务交易的处理方法和装置 |
US20190114206A1 (en) * | 2017-10-18 | 2019-04-18 | Cisco Technology, Inc. | System and method for providing a performance based packet scheduler |
CN109246470B (zh) * | 2018-09-29 | 2020-10-16 | 武汉斗鱼网络科技有限公司 | 多线程同步的弹幕分发方法、装置、设备及存储介质 |
CN110650008B (zh) * | 2019-08-30 | 2023-05-19 | 武汉船舶通信研究所(中国船舶重工集团公司第七二二研究所) | 多端口fc加密方法及装置 |
CN112527509B (zh) * | 2020-12-21 | 2023-09-01 | 北京百度网讯科技有限公司 | 一种资源分配方法、装置、电子设备及存储介质 |
Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1517917A (zh) * | 2003-01-27 | 2004-08-04 | ������������ʽ���� | 在多线程环境中管理和持久结构相关联的事务处理的方法 |
CN1706204A (zh) * | 2002-06-14 | 2005-12-07 | 国际商业机器公司 | 用于信令事件的业务逻辑环境高速缓存 |
CN1874538A (zh) * | 2005-07-20 | 2006-12-06 | 华为技术有限公司 | 一种呼叫事件并发处理方法 |
CN101364190A (zh) * | 2008-09-24 | 2009-02-11 | 金蝶软件(中国)有限公司 | 图形用户界面执行同步、异步操作的方法及装置 |
US7730501B2 (en) * | 2003-11-19 | 2010-06-01 | Intel Corporation | Method for parallel processing of events within multiple event contexts maintaining ordered mutual exclusion |
CN103092682A (zh) * | 2011-10-28 | 2013-05-08 | 浙江大华技术股份有限公司 | 异步网络应用程序处理方法 |
CN104932946A (zh) * | 2009-07-28 | 2015-09-23 | 瑞典爱立信有限公司 | 用于处理电信网络中的事件的设备和方法 |
Family Cites Families (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7814500B2 (en) * | 2006-11-30 | 2010-10-12 | Sap Ag | Event correlation for decentralized message processing |
JP4771431B2 (ja) * | 2007-09-20 | 2011-09-14 | Kddi株式会社 | オペレーティングシステムに基づくイベント処理機能搭載装置及びプログラム |
US8239873B2 (en) * | 2008-08-12 | 2012-08-07 | Verizon Patent And Licensing Inc. | Speedy event processing |
-
2016
- 2016-07-21 CN CN201610579344.1A patent/CN106155794B/zh active Active
Patent Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1706204A (zh) * | 2002-06-14 | 2005-12-07 | 国际商业机器公司 | 用于信令事件的业务逻辑环境高速缓存 |
CN1517917A (zh) * | 2003-01-27 | 2004-08-04 | ������������ʽ���� | 在多线程环境中管理和持久结构相关联的事务处理的方法 |
US7730501B2 (en) * | 2003-11-19 | 2010-06-01 | Intel Corporation | Method for parallel processing of events within multiple event contexts maintaining ordered mutual exclusion |
CN1874538A (zh) * | 2005-07-20 | 2006-12-06 | 华为技术有限公司 | 一种呼叫事件并发处理方法 |
CN101364190A (zh) * | 2008-09-24 | 2009-02-11 | 金蝶软件(中国)有限公司 | 图形用户界面执行同步、异步操作的方法及装置 |
CN104932946A (zh) * | 2009-07-28 | 2015-09-23 | 瑞典爱立信有限公司 | 用于处理电信网络中的事件的设备和方法 |
CN103092682A (zh) * | 2011-10-28 | 2013-05-08 | 浙江大华技术股份有限公司 | 异步网络应用程序处理方法 |
Also Published As
Publication number | Publication date |
---|---|
CN106155794A (zh) | 2016-11-23 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN106155794B (zh) | 一种应用于多线程系统中的事件分配方法及装置 | |
US6748593B1 (en) | Apparatus and method for starvation load balancing using a global run queue in a multiple run queue system | |
US6735769B1 (en) | Apparatus and method for initial load balancing in a multiple run queue system | |
US6658449B1 (en) | Apparatus and method for periodic load balancing in a multiple run queue system | |
Dong et al. | Scheduling mixed real-time and non-real-time applications in mapreduce environment | |
KR101686010B1 (ko) | 실시간 멀티코어 시스템의 동기화 스케쥴링 장치 및 방법 | |
KR101638136B1 (ko) | 멀티 스레드 구조에서 작업 분배 시 스레드 간 락 경쟁을 최소화하는 방법 및 이를 사용한 장치 | |
KR20110075297A (ko) | 병렬도를 고려한 병렬 처리 장치 및 방법 | |
US20210390405A1 (en) | Microservice-based training systems in heterogeneous graphic processor unit (gpu) cluster and operating method thereof | |
CN111651864B (zh) | 一种事件集中发射式多异构时间队列优化仿真执行方法及系统 | |
CN109564528A (zh) | 分布式计算中计算资源分配的系统和方法 | |
US11875425B2 (en) | Implementing heterogeneous wavefronts on a graphics processing unit (GPU) | |
CN109144707A (zh) | 一种处理大数据平台Spark数据分配不均衡的方法 | |
CN110308982A (zh) | 一种共享内存复用方法及装置 | |
EP3398065A1 (en) | Data driven scheduler on multiple computing cores | |
CN107329822B (zh) | 面向多源多核系统的基于超任务网的多核调度方法 | |
KR101848450B1 (ko) | 도커 기반의 매니코어 관리 방법 및 이를 수행하는 도커 기반의 매니코어 관리 장치 | |
US20030110204A1 (en) | Apparatus and method for dispatching fixed priority threads using a global run queue in a multiple run queue system | |
Wang et al. | A Smart Semipartitioned Real‐Time Scheduling Strategy for Mixed‐Criticality Systems in 6G‐Based Edge Computing | |
CN104090826A (zh) | 基于相关性的任务优化部署方法 | |
Gharajeh et al. | Heuristic-based task-to-thread mapping in multi-core processors | |
Tsog et al. | Static allocation of parallel tasks to improve schedulability in cpu-gpu heterogeneous real-time systems | |
US20150212859A1 (en) | Graphics processing unit controller, host system, and methods | |
CN112114877B (zh) | 一种动态补偿线程束warp的方法、处理器及计算机存储介质 | |
CN109766168B (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 | ||
GR01 | Patent grant | ||
GR01 | Patent grant |