一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

一种事件处理方法、装置、设备及计算机可读存储介质与流程

2021-11-10 04:07:00 来源:中国专利 TAG:


1.本技术涉及计算机技术领域,尤其涉及一种事件处理方法、装置、设备及计算机可读存储介质。


背景技术:

2.为了实现多个事件的跨进程并发处理,目前采用的技术方案为:目标进程接收到其他进程发送的多个事件的情况下,目标进程的线程调度器为目标进程内的多个线程分配时间片,在轮到每个线程对应的时间片的情况下,将cpu(central processing unit,中央处理器)资源切换给每个线程,调用每个线程对每个事件进行处理。显然,这种方案增加cpu资源的切换开销,还降低多个事件的跨进程并发处理效率。


技术实现要素:

3.本技术提供了一种事件处理方法、装置、设备及计算机存储介质,至少可以提高多个事件的跨进程并发处理效率。
4.本技术提供了一种事件处理方法,该方法包括:
5.第一协程生成目标业务对应的目标事件;其中,所述目标事件包括第二协程的目标协程标识信息,所述第一协程为第一进程对应线程下的协程,所述第二协程为第二进程对应线程下的协程;
6.所述第一协程通过所述第一进程和所述第二进程间的目标网络通信链路,向所述第二进程发送所述目标事件;
7.所述第二进程内的调度线程根据所述目标协程标识信息,调度所述第二协程执行所述目标事件。
8.本技术还提供了一种事件处理装置,该装置包括:
9.生成模块,用于第一协程生成目标业务对应的目标事件;其中,所述目标事件包括第二协程的目标协程标识信息,所述第一协程为第一进程对应线程下的协程,所述第二协程为第二进程对应线程下的协程;
10.发送模块,用于所述第一协程通过所述第一进程和所述第二进程间的目标网络通信链路,向所述第二进程发送所述目标事件;
11.第一调度模块,用于所述第二进程内的调度线程根据所述目标协程标识信息,调度所述第二协程执行所述目标事件。
12.在一些可选的实施例中,上述第一调度模块包括:
13.第一存储单元,用于所述调度线程根据所述目标协程标识信息,将所述目标事件存储于所述第二协程对应的事件队列;其中,所述第二协程对应的事件队列用于存储所述第二协程对应的待处理的事件;
14.第二存储单元,用于所述调度线程将所述第二协程存储于协程队列;其中,所述协程队列用于存储待调度的协程;
15.第一调度单元,用于所述调度线程基于第一位置信息和第二位置信息,调度所述第二协程执行所述目标事件;其中,所述第一位置信息表征所述第二协程在所述协程队列中的位置,所述第二位置信息表征所述目标事件在所述第二协程对应的事件队列中的位置。
16.在一些可选的实施例中,上述第一调度单元包括:
17.第一调度子单元,用于所述调度线程依次调度目标协程执行待执行事件;其中,所述目标协程为位于所述协程队列的首端的协程,所述待执行事件为位于所述目标协程对应的事件队列的首端的事件;
18.第一删除子单元,用于在所述目标协程执行完所述待执行事件的情况下,所述调度线程将所述待执行事件从所述目标协程对应的事件队列中删除,并判断所述目标协程对应的事件队列是否为空;
19.转移子单元,用于在判断为非空的情况下,将所述目标协程转移至所述协程队列的末端,将所述目标协程的相邻协程转移至所述协程队列的首端,将所述待执行事件的相邻事件转移至所述目标协程对应的事件队列的首端;
20.第二调度子单元,用于在所述第一位置信息表征所述第二协程位于所述协程队列的首端、且所述第二位置信息表征所述目标事件位于所述第二协程对应的事件队列的首端的情况下,所述调度线程调度所述第二协程执行所述目标事件。
21.在一些可选的实施例中,上述调度单元还包括:
22.第二删除子单元,用于在判断为空的情况下,将所述目标协程从所述协程队列中删除,将所述相邻协程转移至所述协程队列的首端;
23.第二调度子单元,还用于在所述第一位置信息表征所述第二协程位于所述协程队列的首端、且所述第二位置信息表征所述目标事件位于所述第二协程对应的事件队列的首端的情况下,所述调度线程调度所述第二协程执行所述目标事件。
24.在一些可选的实施例中,上述装置还包括:
25.判断模块,用于所述调度线程判断所述协程队列是否存在所述第二协程;
26.相应的,上述第二存储单元还用于在判断为不存在的情况下,所述调度线程将所述第二协程存储于所述协程队列。
27.在一些可选的实施例中,上述装置还包括:
28.监测模块,用于所述调度线程监测多个网络通信链路的链路状态信息;其中,所述多个网络通信链路包括所述目标网络通信链路;
29.上述第一调度模块包括:
30.第二调度单元,用于所述调度线程在监测到所述目标网络通信链路的目标链路状态信息指示存在待接收的事件的情况下,根据所述目标协程标识信息,调度所述第二协程执行所述目标事件。
31.在一些可选的实施例中,上述装置还包括:
32.第一接收模块,用于所述调度线程在监测到所述多个网络通信链路的链路状态信息指示存在待接收的事件的情况下,同时接收多个事件;其中,所述多个事件包括所述目标事件,所述多个事件间存在执行优先级;
33.确定模块,用于所述调度线程根据所述多个事件中的协程标识信息,确定所述多
个事件对应的协程;
34.第一存储模块,用于所述调度线程根据所述执行优先级,依次将所述多个事件存储于对应的协程的事件队列;
35.第二存储模块,用于所述调度线程根据所述执行优先级,将所述多个事件对应的协程存储于所述协程队列。
36.本技术还提供了一种事件处理设备,所述设备包括处理器和存储器,所述存储器中存储有至少一条指令或至少一段程序、所述至少一条指令或所述至少一段程序由所述处理器加载并执行以实现如上所述的事件处理方法。
37.本技术还提供了一种计算机可读存储介质,所述存储介质中存储有至少一条指令、至少一段程序、代码集或指令集,所述至少一条指令、所述至少一段程序、所述代码集或指令集由处理器加载并执行以实现如上述的事件处理方法。
38.本技术提供的一种事件处理方法、装置、设备及计算机可读存储介质,具有如下技术效果:
39.本技术中,由于协程具有执行完事件之后主动出让cpu资源的特性,在目标事件的跨进程处理的情况下,通过调度线程根据目标事件中的目标协程标识信息,调度第二协程执行目标事件,可以大大提高目标事件的处理效率,还可以大大减少cpu资源的切换开销。
40.应当理解的是,以上的一般描述和后文的细节描述仅是示例性和解释性的,并不能限制本技术。
附图说明
41.为了更清楚地说明本技术实施例或现有技术中的技术方案和优点,下面将对实施例或现有技术描述中所需要使用的附图作简单的介绍,显而易见地,下面描述中的附图仅仅是本技术的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其它附图。
42.图1是本技术实施例提供的一种事件处理方法的流程示意图;
43.图2是本技术实施例提供的一种调度第二协程执行目标事件的具体过程的流程示意图;
44.图3是本技术实施例提供的另一种调度第二协程执行目标事件的具体过程的流程示意图;
45.图4是本技术实施例提供的一种线程栈切换至协程栈的过程的示意图;
46.图5是本技术实施例提供的一种协程栈切换至线程栈的过程的示意图;
47.图6是本技术实施例提供的一种事件处理过程的展示图;
48.图7是本技术实施例提供的一种ap(adaptive platform,自适应平台)的系统框架图;
49.图8是本技术实施例提供的一种进程、线程和协程间的结构关系图;
50.图9是本技术实施例提供的一种事件处理装置的结构示意图;
51.图10是本技术实施例提供的一种事件处理方法的服务器的硬件结构框图。
具体实施方式
52.下面将结合本技术实施例中的附图,对本技术实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本技术一部分实施例,而不是全部的实施例。基于本技术中的实施例,本领域普通技术人员在没有做出创造性劳动的前提下所获得的所有其他实施例,都属于本技术保护的范围。
53.需要说明的是,本技术的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的本技术的实施例能够以除了在这里图示或描述的那些以外的顺序实施。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、系统、产品或服务器不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。
54.以下介绍本技术的一种事件处理方法,本说明书提供了如实施例或流程图所述的方法操作步骤,但基于常规或者无创造性的劳动可以包括更多或者更少的操作步骤。实施例中列举的步骤顺序仅仅为众多步骤执行顺序中的一种方式,不代表唯一的执行顺序。在实际中的系统或服务器产品执行时,可以按照实施例或者附图所示的方法顺序执行或者并行执行(例如并行处理器或者多线程处理的环境)。具体的,如图1所示,所述方法包括:
55.s101:第一协程生成目标业务对应的目标事件;其中,所述目标事件包括第二协程的目标协程标识信息,所述第一协程为第一进程对应线程下的协程,所述第二协程为第二进程对应线程下的协程。
56.本技术实施例中,第一进程和第二进程可以为同一操作系统中的不同进程。具体的,该操作系统可以包括但不限于linux系统和qnx(quick unix)系统。
57.本技术实施例中,第一进程可以包括至少一个第一线程,第一协程可以为任意一个第一线程下的协程。第二进程可以包括至少一个第二线程,第二协程可以为任意一个第二线程下的协程。
58.本技术实施例中,目标业务可以包括任意一种需要跨进程处理的业务。第一协程可以根据目标业务的业务需求,生成需要第二协程执行的目标事件。
59.本技术实施例中,目标协程标识信息可以包括第二协程的协程id(identitydocument,身份标识),还可以包括第二协程所属的第二线程的线程id。可以理解,目标协程标识信息用于区分第二协程和除第二协程之外的其他协程,具有唯一性。
60.s103:所述第一协程通过所述第一进程和所述第二进程间的目标网络通信链路,向所述第二进程发送所述目标事件。
61.本技术实施例中,可以通过ipc机制实现目标网络通信链路。具体的,该ipc机制可以包括但不限于共享内存和unix socket(套接字)。
62.以unix socket为例,采用unix socket实现的目标网络通信链路包括发送接口,该发送接口定义有发送端地址和目的端地址。具体的,发送端地址可以为第一进程的进程标识信息,目的端地址可以为第二进程的进程标识信息。第一协程通过调用该发送接口,实现通过目标网络通信链路向第二进程发送目标事件。具体的,第一进程的进程标识信息可以为第一进程的进程id,第二进程的进程标识信息可以为第二进程的进程id。第一进程的
进程标识信息用于区别第一进程和操作系统中除第一进程之外的其他进程,具有唯一性。第二进程的进程标识信息用于区别第二进程和操作系统中除第二进程之外的其他进程,具有唯一性。
63.s105:所述第二进程内的调度线程根据所述目标协程标识信息,调度所述第二协程执行所述目标事件。
64.本技术实施例中,第二进程还可以包括调度线程,调度线程可以用于调度至少一个第二线程下的协程。相应的,第二进程接收目标事件之后,调度线程可以根据目标事件中的目标协程标识信息,确定第二协程,然后调度第二协程执行目标事件。
65.具体的,调度线程可以将第二协程对应的第二线程的cpu资源分配给第二协程,然后调度第二协程执行目标事件。第二协程在执行完目标事件之后,会主动出让cpu资源,便于调度线程将cpu资源分配给第二协程对应的第二线程下的其他协程执行相应事件。其中,其他协程为第二协程对应的第二线程下的的协程中除第二协程之外的协程。
66.由于协程具有执行完事件之后主动出让cpu资源的特性,协程间无需切换cpu资源,在目标事件的跨进程处理的情况下,通过调度线程根据目标事件中的目标协程标识信息,调度第二协程执行目标事件,可以大大减少cpu资源的切换开销,还能够大大提高目标事件的处理效率。
67.在一个具体的实施例中,如图2所示,为本技术实施例提供的一种调度第二协程执行目标事件的具体过程的流程示意图。参照图2,上述调度线程根据所述目标协程标识信息,调度所述第二协程执行所述目标事件包括:
68.s201:所述调度线程根据所述目标协程标识信息,将所述目标事件存储于所述第二协程对应的事件队列;其中,所述第二协程对应的事件队列用于存储所述第二协程对应的待处理的事件。
69.在一个具体的实施例中,调度线程根据目标协程标识信息,将目标事件存储于第二协程对应的事件队列的末端。
70.在一个可选的实施例中,调度线程可以为第二协程对应的待处理的事件分配内存地址,按照内存地址将第二协程对应的待处理的事件存储于第二进程的内存池。第二协程对应的事件队列可以用于存储第二协程对应的待处理的事件的内存地址。
71.相应的,调度线程可以为目标事件分配内存地址,将目标事件的内存地址存储于第二协程对应的事件队列的末端。由此,在第二协程执行对应的事件队列中的待处理的事件的情况下,第二协程可以根据对应的事件队列中的待处理的事件的内存地址,以内存指针的方式读取第二进程的内存池中的第二协程对应的待处理的事件。
72.可以理解,调度线程在将第二协程对应的每个待处理的事件存储于第二协程对应的事件队列的情况下,均是从第二协程对应的事件队列的末端开始存储。可以利用事件队列的先进先出原则,来确定第二协程对应的每个待处理的事件的事件优先级。可便于第二协程有序处理对应的每个待处理的事件。
73.s203:所述调度线程将所述第二协程存储于协程队列;其中,所述协程队列用于存储待调度的协程。
74.在一个具体的实施例中,调度线程可以将第二协程存储于协程队列的末端。
75.可以理解,调度线程在将每个待调度的协程存储于协程队列的情况下,均是从协
程队列的末端开始存储。可以利用协程队列的先进先出原则,来确定每个待调度的协程的调度优先级。可便于调度线程有序调度每个待调度的协程。
76.s205:所述调度线程基于第一位置信息和第二位置信息,调度所述第二协程执行所述目标事件;其中,所述第一位置信息表征所述第二协程在所述协程队列中的位置,所述第二位置信息表征所述目标事件在所述第二协程对应的事件队列中的位置。
77.本技术实施例中,利用协程队列的先进先出原则以及第二协程对应的事件队列的先进先出原则,调度线程可以基于第二协程在协程队列中的位置以及目标事件在第二协程对应的事件队列中的位置,调度第二协程执行目标事件。
78.在一个具体的实施例中,如图3所示,为本技术实施例提供的另一种调度第二协程执行目标事件的具体过程的流程示意图。参照图3,上述调度线程基于第一位置信息和第二位置信息,调度所述第二协程执行所述目标事件包括:
79.s301:所述调度线程依次调度目标协程执行待执行事件;其中,所述目标协程为位于所述协程队列的首端的协程,所述待执行事件为位于所述目标协程对应的事件队列的首端的事件。
80.具体的,调度线程将第二协程对应的第二线程的cpu资源分配给目标协程,然后调度目标协程执行待执行事件。
81.s303:在所述目标协程执行完所述待执行事件的情况下,所述调度线程将所述待执行事件从所述目标协程对应的事件队列中删除,并判断所述目标协程对应的事件队列是否为空。
82.具体的,在目标协程执行完待执行事件的情况下,待执行事件不再是目标协程对应的事件队列中的待处理的事件,调度线程将其从目标协程对应的事件队列中删除。
83.具体的,在目标协程执行完待执行事件的情况下,目标协程主动出让cpu资源。考虑到协程队列中的待调度的协程的阻塞时间不宜过长,不论目标协程对应的事件队列为空或者非空,目标协程均会主动出让cpu资源,以便调度线程后续调度待调度的协程,减少待调度的协程的阻塞时间。
84.可以理解,在目标协程执行完待执行事件的情况下,调度线程需要确定目标协程是否还需要执行待处理的事件。如果目标协程还需要执行待处理的事件,目标协程还能作为待调度的协程,调度线程不可将目标协程从协程队列中删除,而是转移目标协程的位置。如果目标协程没有需要执行的待处理的事件,目标协程不再为待调度的协程,调度线程需要将目标协程从协程队列中删除。具体的,调度线程通过判断目标协程对应的事件队列是空还是非空,来确定如何处理目标协程在协程队列的位置。
85.s305:在判断为非空的情况下,将所述目标协程转移至所述协程队列的末端,将所述目标协程的相邻协程转移至所述协程队列的首端,将所述待执行事件的相邻事件转移至所述目标协程对应的事件队列的首端。
86.本技术实施例中,调度线程在判断为非空的情况下,说明目标协程还可以作为待调度的协程,考虑到协程队列的先进先出原则,调度线程将目标协程从协程队列的首端转移至协程队列的末端,将相邻协程转移至协程队列的首端。可以理解,相邻协程可看作更新后的目标协程,在将相邻事件转移至目标协程对应的事件队列的手段的情况下,相邻事件可看作更新后的待执行事件。此时,调度线程可以将目标协程主动出让的cpu资源分配给更
新后的目标协程,调度更新后的目标协程执行更新后的待执行事件。
87.s307:在所述第一位置信息表征所述第二协程位于所述协程队列的首端、且所述第二位置信息表征所述目标事件位于所述第二协程对应的事件队列的首端的情况下,所述调度线程调度所述第二协程执行所述目标事件。
88.根据上述方案可知,随着调度线程依次调度目标协程执行目标事件,第一位置信息和第二位置信息依次更新。在调度线程将第二协程转移至协程队列的首端,将目标事件转移至第二协程对应的事件队列的首端的情况下,调度线程将第二协程对应的第二线程的cpu资源分配给第二协程,调度第二协程执行目标事件。
89.可以理解,本技术利用协程队列的先进先出原则,有序调度线程队列中的待调度的协程。又利用待调度的协程对应的事件队列的先进先出原则,有序调度待调度的协程执行对应的事件队列中的待处理的事件。由于,待调度的协程每次执行对应的事件队列中的一个待处理的事件,即主动出让cpu资源,可以大大减少协程队列中待调度的协程的阻塞时间,以及大大减少协程队列中待调度的协程对应的事件队列的待处理的事件的阻塞时间。由于,待调度的协程无需抢占cpu资源,待调度的协程间无需切换cpu资源,本技术可大大减少cpu资源的切换开销,还可大大提高多个事件的跨进程并发处理效率。
90.在一个具体的实施例中,若目标协程对应的事件队列为空,上述调度线程基于第一位置信息和第二位置信息,调度所述第二协程执行所述目标事件还包括:
91.在判断为空的情况下,将所述目标协程从所述协程队列中删除,将所述相邻协程转移至所述协程队列的首端;
92.在所述第一位置信息表征所述第二协程位于所述协程队列的首端、且所述第二位置信息表征所述目标事件位于所述第二协程对应的事件队列的首端的情况下,所述调度线程调度所述第二协程执行所述目标事件。
93.本技术实施例中,若目标协程对应的事件队列为空,说明目标协程没有需要执行的待处理的事件,不再是待调度的协程。调度线程可以将目标协程从协程队列中删除。
94.随着调度线程依次调度目标协程执行目标事件,第一位置信息和第二位置信息依次更新。在调度线程将第二协程转移至协程队列的首端,将目标事件转移至第二协程对应的事件队列的首端的情况下,调度线程将第二协程对应的第二线程的cpu资源分配给第二协程,调度第二协程执行目标事件。
95.在一个具体的实施例中,在所述调度线程将所述第二协程存储于协程队列之前,上述方法还包括:
96.所述调度线程判断所述协程队列是否存在所述第二协程;
97.相应的,所述调度线程将所述第二协程存储于协程队列包括:
98.在判断为不存在的情况下,所述调度线程将所述第二协程存储于所述协程队列。
99.本技术实施例中,若第二协程已经存储于协程队列,调度线程根据目标协程标识信息将目标事件存储于第二协程对应的事件队列中之后,调度线程无需执行上述将第二协程存储于协程队列的操作。
100.在一个具体的实施例中,上述方法还包括:
101.所述调度线程监测多个网络通信链路的链路状态信息;其中,所述多个网络通信链路包括所述目标网络通信链路;
102.所述第二进程内的调度线程根据所述目标协程标识信息,调度所述第二协程执行所述目标事件包括:
103.所述调度线程在监测到所述目标网络通信链路的目标链路状态信息指示存在待接收的事件的情况下,根据所述目标协程标识信息,调度所述第二协程执行所述目标事件。
104.本技术实施例中,第二进程和包括第一进程在内的多个进程存在进程间通信。相应的,上述多个网络通信链路可以为第二进程与上述多个进程间的网络通信链路。
105.本技术实施例中,多个网络通信链路的链路状态信息可以表征多个网络通信链路是否存在待接收的事件。具体的,多个网络通信链路的链路状态信息可以为多个网络通信链路的链路状态标识。在多个网络通信链路存在待接收的事件的情况下,多个网络通信链路的链路状态标识为1。在多个网络通信链路不存在待接收的事件的情况下,多个网络通信链路的链路状态标识为0。
106.具体的,若调度线程监测到目标网络通信链路的链路状态表示为1,则接收目标事件,并根据目标事件中的目标协程id,调度第二协程执行目标事件。
107.在一个具体的实施例中,上述方法还包括:
108.所述调度线程在监测到所述多个网络通信链路的链路状态信息指示存在待接收的事件的情况下,同时接收多个事件;其中,所述多个事件包括所述目标事件,所述多个事件间存在执行优先级;
109.所述调度线程根据所述多个事件中的协程标识信息,确定所述多个事件对应的协程;
110.所述调度线程根据所述执行优先级,依次将所述多个事件存储于对应的协程的事件队列;
111.所述调度线程根据所述执行优先级,将所述多个事件对应的协程存储于所述协程队列。
112.本技术实施例中,调度线程通过选择接口监测多个网络通信链路。在多个网络通信链路存在待接收的事件的情况下,调度线程还可以通过选择接口同时接收多个事件,然后根据多个事件的事件优先级,依次将多个事件存储于对应的协程的事件队列,以及将多个事件对应的协程存储于协程队列。如此,在调度线程调度目标协程执行待执行事件的情况下,可以根据多个事件的事件优先级实现多个事件的跨进程高并发处理。
113.如图4所示,为本技术实施例提供的一种线程栈切换至协程栈的过程的示意图。结合图4,可以说明调度线程如何将第二协程对应线程的cpu资源分配给第二协程,调度第二协程执行目标事件。
114.如图5所示,为本技术实施例提供的一种协程栈切换至线程栈的过程的示意图。结合图5,可以说明第二协程执行完目标事件之后,如何主动出让第二协程对应线程的cpu资源。
115.具体的,以cpu为ppc系列处理器为例,调度线程将cpu资源分配给第二协程的过程为:
116.1)调度线程控制开始栈指针(sp)指向第二协程对应线程的线程栈的初始位置(a1)。
117.2)调度线程根据目标事件需要保存的数据的大小,控制sp向上偏移到结束位置
(a2),将a1

a2间的上下文数据保存并出栈;其中,a1

a2间的上下文数据包括sp的初始位置、通用寄存器r3的数据、连接寄存器lr的数据、条件寄存器cr的数据、条件寄存器ctr的数据和通用寄存器r14

r31的数据。
118.3)调度线程根据寄存器r3的数据,找到第二协程的协程管理结构的pprocsp域(第二协程的协程栈的栈地址),控制sp指向第二协程的协程栈的栈地址。
119.4)调度线程根据第二协程的协程栈的栈地址,完成第二协程对应的线程栈到第二协程的协程栈的栈切换,并将a1

a2间的上下文数据压栈进第二协程的协程栈;其中,栈切换可以通过汇编语言来实现,以提高切换效率。
120.5)调度线程调度第二协程执行目标事件。
121.具体的,以cpu为ppc系列处理器为例,第二协程执行完目标事件之后,主动出让第二协程对应线程的cpu资源的过程为:
122.6)在第二协程执行完目标事件之后,第二协程从第二协程的协程管理结构中的ptasksp域获取栈切换前的第二协程对应线程的线程栈的栈地址,控制sp指向切换回第二协程对应线程的线程栈的栈地址,将上下文数据从自己的协程栈出栈,控制sp指向第二协程对应线程的线程栈的栈地址,以将上下文数据压栈进第二协程对应线程的线程栈。
123.通过上述方案,调度线程可以将第二协程对应线程的cpu资源分配给第二协程,调度第二协程执行目标事件。第二协程执行完目标事件之后,可以主动出让第二协程对应线程的cpu资源。
124.在一种可选的实施例中,根据目标业务的业务需求,本技术实施例所提供的事件处理方法还可以存在不同协程间的同步事件处理。
125.具体的,以cpu为ppc系列处理器为例,第二协程向第三协程发送同步事件的栈切换的过程为:
126.7)第二协程在执行目标事件的过程中生成同步事件,向调度线程发送同步事件并主动出让第二协程对应线程的cpu资源,主动出让第二协程对应线程的cpu资源的具体过程与上述6)中第二协程主动出让第二协程对应线程的cpu资源相似。
127.8)调度线程将第二协程对应线程的cpu资源分配给第三协程,具体过程与上述1)~4)中调度线程将第二协程对应线程的cpu资源分配给第二协程的过程相似。
128.9)调度线程调度第三协程执行同步事件。
129.10)第三协程执行完同步事件之后,主动出让第二协程对应线程的cpu资源,主动出让第二协程对应线程的cpu资源的具体过程与上述6)中第二协程主动出让第二协程对应线程的cpu资源相似。
130.11)调度线程继续将第二协程对应线程的cpu资源分配给第二协程,调度第二协程继续执行目标事件。
131.上述方案中可以实现协程间的同步事件的处理。
132.为了说明本技术实施例所提供的事件处理方法的具体实现过程,如图6所示,为本技术实施例提供的一种事件处理过程的展示图。具体的,包括存储环节和调度环节。
133.a.存储环节:调度线程通过选择接口监测网络通信链路1

n,在监测到目标网络通信链路存在待接收的事件的情况下,接收目标事件。根据目标事件携带的目标协程标识信息,将目标事件存储于第二协程对应的事件队列的末端,将第二协程存储于协程队列的末
端。
134.b.调度环节:根据协程队列和事件队列的先进先出原则,由于协程队列的首端为目标协程,目标协程对应的事件队列的首端为待执行事件,调度线程调度目标协程执行待执行事件。
135.为了具体说明本技术实施例所提供的事件处理方法的具体应用场景,如图7所示,为本技术实施例提供的一种ap(adaptive platform,自适应平台)的系统框架图。具体的,ap包括多种自适应应用程序模块、多种应用程序接口模块、操作系统抽象层和应用程序接口的基础功能集群。可以理解,本技术实施例所提供的事件处理方法适用于上述多种自适应应用程序模块、多种应用程序接口模块、操作系统抽象层和应用程序接口的基础功能集群间的跨进程的事件高并发处理。
136.为了说明进程、线程和协程间的结构关系,如图8所示,为本技术实施例提供的一种进程、线程和协程间的结构关系图。参照图8,进程1、进程2和其它进程共同分享操作系统的cpu资源。进程1内包括线程1、线程2、线程3和其它线程。其中,线程3由于内部只有一个协程,为一级调度线程;线程1由于内部有多个协程,为二级调度线程。可以理解,不同的进程可以分别服务于图7中的不同模块。
137.如图9所示,为本技术实施例提供的一种事件处理装置900的结构示意图,该装置包括:
138.生成模块901,用于第一协程生成目标业务对应的目标事件;其中,所述目标事件包括第二协程的目标协程标识信息,所述第一协程为第一进程对应线程下的协程,所述第二协程为第二进程对应线程下的协程;
139.发送模块903,用于所述第一协程通过所述第一进程和所述第二进程间的目标网络通信链路,向所述第二进程发送所述目标事件;
140.第一调度模块905,用于所述第二进程内的调度线程根据所述目标协程标识信息,调度所述第二协程执行所述目标事件。
141.在一些可选的实施例中,上述第一调度模块905包括:
142.第一存储单元,用于所述调度线程根据所述目标协程标识信息,将所述目标事件存储于所述第二协程对应的事件队列;其中,所述第二协程对应的事件队列用于存储所述第二协程对应的待处理的事件;
143.第二存储单元,用于所述调度线程将所述第二协程存储于协程队列;其中,所述协程队列用于存储待调度的协程;
144.第一调度单元,用于所述调度线程基于第一位置信息和第二位置信息,调度所述第二协程执行所述目标事件;其中,所述第一位置信息表征所述第二协程在所述协程队列中的位置,所述第二位置信息表征所述目标事件在所述第二协程对应的事件队列中的位置。
145.在一些可选的实施例中,上述第一调度单元包括:
146.第一调度子单元,用于所述调度线程依次调度目标协程执行待执行事件;其中,所述目标协程为位于所述协程队列的首端的协程,所述待执行事件为位于所述目标协程对应的事件队列的首端的事件;
147.第一删除子单元,用于在所述目标协程执行完所述待执行事件的情况下,所述调
度线程将所述待执行事件从所述目标协程对应的事件队列中删除,并判断所述目标协程对应的事件队列是否为空;
148.转移子单元,用于在判断为非空的情况下,将所述目标协程转移至所述协程队列的末端,将所述目标协程的相邻协程转移至所述协程队列的首端,将所述待执行事件的相邻事件转移至所述目标协程对应的事件队列的首端;
149.第二调度子单元,用于在所述第一位置信息表征所述第二协程位于所述协程队列的首端、且所述第二位置信息表征所述目标事件位于所述第二协程对应的事件队列的首端的情况下,所述调度线程调度所述第二协程执行所述目标事件。
150.在一些可选的实施例中,上述调度单元还包括:
151.第二删除子单元,用于在判断为空的情况下,将所述目标协程从所述协程队列中删除,将所述相邻协程转移至所述协程队列的首端;
152.第二调度子单元,还用于在所述第一位置信息表征所述第二协程位于所述协程队列的首端、且所述第二位置信息表征所述目标事件位于所述第二协程对应的事件队列的首端的情况下,所述调度线程调度所述第二协程执行所述目标事件。
153.在一些可选的实施例中,上述装置还包括:
154.判断模块,用于所述调度线程判断所述协程队列是否存在所述第二协程;
155.相应的,上述第二存储单元还用于在判断为不存在的情况下,所述调度线程将所述第二协程存储于所述协程队列。
156.在一些可选的实施例中,上述装置还包括:
157.监测模块,用于所述调度线程监测多个网络通信链路的链路状态信息;其中,所述多个网络通信链路包括所述目标网络通信链路;
158.上述第一调度模块包括:
159.第二调度单元,用于所述调度线程在监测到所述目标网络通信链路的目标链路状态信息指示存在待接收的事件的情况下,根据所述目标协程标识信息,调度所述第二协程执行所述目标事件。
160.在一些可选的实施例中,上述装置还包括:
161.第一接收模块,用于所述调度线程在监测到所述多个网络通信链路的链路状态信息指示存在待接收的事件的情况下,同时接收多个事件;其中,所述多个事件包括所述目标事件,所述多个事件间存在执行优先级;
162.确定模块,用于所述调度线程根据所述多个事件中的协程标识信息,确定所述多个事件对应的协程;
163.第一存储模块,用于所述调度线程根据所述执行优先级,依次将所述多个事件存储于对应的协程的事件队列;
164.第二存储模块,用于所述调度线程根据所述执行优先级,将所述多个事件对应的协程存储于所述协程队列。
165.在一些可选的实施例中,上述装置还包括:
166.获取模块,用于所述调度线程在监测到所述多个网络通信链路的链路状态信息指示存在待接收的事件的情况下,获取所述多个网络通信链路间的链路优先级;
167.第二接收模块,用于所述调度线程根据所述链路优先级,依次接收多个事件;
168.第二调度模块,用于所述调度线程在接收每个事件的情况下,根据所述每个事件中的协程标识信息,调度所述每个事件对应的协程执行所述每个事件。
169.所述的装置实施例中的装置与对应的方法实施例基于同样地发明构思。
170.本技术还提供了一种事件处理设备,所述设备包括处理器和存储器,所述存储器中存储有至少一条指令或至少一段程序、所述至少一条指令或所述至少一段程序由所述处理器加载并执行以实现如上所述的事件处理方法。
171.所述的设备实施例中的设备与对应的方法实施例基于同样地发明构思。
172.本技术还提供了一种计算机可读存储介质,所述存储介质中存储有至少一条指令、至少一段程序、代码集或指令集,所述至少一条指令、所述至少一段程序、所述代码集或指令集由处理器加载并执行以实现如上述的事件处理方法。
173.所述的计算机可读存储介质实施例中的计算机可读存储介质与对应的方法实施例基于同样地发明构思。
174.本技术实施例还提供了一种计算机程序产品或计算机程序,该计算机程序产品或计算机程序包括计算机指令,该计算机指令存储在计算机可读存储介质中。计算机设备的处理器从计算机可读存储介质读取该计算机指令,处理器执行该计算机指令,使得该计算机设备执行上述各种可选实现方式中提供的事件处理方法。
175.本技术实施例提供了一种事件处理服务器,该事件处理服务器包括处理器和存储器,该存储器中存储有至少一条指令、至少一段程序、代码集或指令集,该至少一条指令、该至少一段程序、该代码集或指令集由该处理器加载并执行以实现如上述方法实施例所提供的事件处理方法。
176.存储器可用于存储软件程序以及模块,处理器通过运行存储在存储器的软件程序以及模块,从而执行各种功能应用以及事件处理。存储器可主要包括存储程序区和存储数据区,其中,存储程序区可存储操作系统、功能所需的应用程序等;存储数据区可存储根据所述设备的使用所创建的数据等。此外,存储器可以包括高速随机存取存储器,还可以包括非易失性存储器,例如至少一个磁盘存储器件、闪存器件、或其他易失性固态存储器件。相应地,存储器还可以包括存储器控制器,以提供处理器对存储器的访问。
177.本技术实施例所提供的方法实施例可以在移动终端、计算机终端、服务器或者类似的运算装置中执行。以运行在服务器上为例,图10是本技术实施例提供的一种事件处理方法的服务器的硬件结构框图。如图10所示,该服务器1000可因配置或性能不同而产生比较大的差异,可以包括一个或一个以上中央处理器(central processing units,cpu)1010(处理器1010可以包括但不限于微处理器mcu或可编程逻辑器件fpga等的处理装置)、用于存储数据的存储器1030,一个或一个以上存储应用程序1023或数据1022的存储介质1020(例如一个或一个以上海量存储设备)。其中,存储器1030和存储介质1020可以是短暂存储或持久存储。存储在存储介质1020的程序可以包括一个或一个以上模块,每个模块可以包括对服务器中的一系列指令操作。更进一步地,中央处理器1010可以设置为与存储介质1020通信,在服务器1000上执行存储介质1020中的一系列指令操作。服务器1000还可以包括一个或一个以上电源1060,一个或一个以上有线或无线网络接口1050,一个或一个以上输入输出接口1040,和/或,一个或一个以上操作系统1021,例如windows server
tm
,mac os x
tm
,unix
tm
,linux
tm
,freebsd
tm
等等。
178.输入输出接口1040可以用于经由一个网络接收或者发送数据。上述的网络具体实例可包括服务器1000的通信供应商提供的无线网络。在一个实例中,输入输出接口1040包括一个网络适配器(network interface controller,nic),其可通过基站与其他网络设备相连从而可与互联网进行通讯。在一个实例中,输入输出接口1040可以为射频(radio frequency,rf)模块,其用于通过无线方式与互联网进行通讯。
179.本领域普通技术人员可以理解,图10所示的结构仅为示意,其并不对上述电子装置的结构造成限定。例如,服务器1000还可包括比图10中所示更多或者更少的组件,或者具有与图10所示不同的配置。
180.本技术的实施例还提供了一种存储介质,所述存储介质可设置于服务器之中以保存用于实现方法实施例中一种事件处理方法相关的至少一条指令、至少一段程序、代码集或指令集,该至少一条指令、该至少一段程序、该代码集或指令集由该处理器加载并执行以实现上述方法实施例提供的事件处理方法。
181.可选地,在本实施例中,上述存储介质可以位于计算机网络的多个网络服务器中的至少一个网络服务器。可选地,在本实施例中,上述存储介质可以包括但不限于:u盘、只读存储器(rom,read

only memory)、随机存取存储器(ram,random access memory)、移动硬盘、磁碟或者光盘等各种可以存储程序代码的介质。
182.由上述本技术提供的事件处理方法、装置、服务器或存储介质的实施例可见,本技术中,由于协程具有执行完事件之后主动出让cpu资源的特性,在目标事件的跨进程处理的情况下,通过调度线程根据目标事件中的目标协程标识信息,调度第二协程执行目标事件,可以大大提高目标事件的处理效率,还可以可以大大减少cpu资源的切换开销。
183.需要说明的是:上述本技术实施例先后顺序仅仅为了描述,不代表实施例的优劣。且上述对本说明书特定实施例进行了描述。其它实施例在所附权利要求书的范围内。在一些情况下,在权利要求书中记载的动作或步骤可以按照不同于实施例中的顺序来执行并且仍然可以实现期望的结果。另外,在附图中描绘的过程不一定要求示出的特定顺序或者连续顺序才能实现期望的结果。在某些实施方式中,多任务处理和并行处理也是可以的或者可能是有利的。
184.本说明书中的各个实施例均采用递进的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于装置实施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
185.本领域普通技术人员可以理解实现上述实施例的全部或部分步骤可以通过硬件来完成,也可以通过程序来指令相关的硬件完成,所述的程序可以存储于一种计算机可读存储介质中,上述提到的存储介质可以是只读存储器,磁盘或光盘等。
186.以上所述仅为本技术的较佳实施例,并不用以限制本技术,凡在本技术的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本技术的保护范围之内。
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献