CN115373874A - 跨进程事件处理方法、装置、电子设备、存储介质及车辆 - Google Patents
跨进程事件处理方法、装置、电子设备、存储介质及车辆 Download PDFInfo
- Publication number
- CN115373874A CN115373874A CN202211018251.3A CN202211018251A CN115373874A CN 115373874 A CN115373874 A CN 115373874A CN 202211018251 A CN202211018251 A CN 202211018251A CN 115373874 A CN115373874 A CN 115373874A
- Authority
- CN
- China
- Prior art keywords
- shared memory
- condition
- memory
- under
- state
- 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.)
- Pending
Links
Images
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/54—Interprogram communication
- G06F9/542—Event management; Broadcasting; Multicasting; Notifications
-
- 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
- G06F9/524—Deadlock detection or avoidance
-
- 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/54—Interprogram communication
- G06F9/544—Buffers; Shared memory; Pipes
-
- 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/54—Interprogram communication
- G06F9/546—Message passing systems or structures, e.g. queues
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Multimedia (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本公开提供了一种跨进程事件处理方法、装置、电子设备、存储介质及车辆,涉及计算机技术领域,尤其涉及进程间通信技术领域。具体实现方案为:在需要发送事件通知的情况下,获取进程集合的共享内存的进程锁;共享内存中包括第一对象;在成功获取进程锁的情况下,在共享内存中建立第一对象与进程子集的关联关系;基于共享内存的条件变量信号,唤醒进程集合中的处于休眠状态的多个进程,以通知处理休眠状态的多个进程中的进程子集基于第一对象获取事件通知的消息内容。本公开所提供的事件处理方法,提高了事件通知的效率解决了使用条件变量信号不能定向唤醒进程的弊端,完成了将事件通知定向传递给进程子集,提高了跨进程事件通知的效率。
Description
技术领域
本公开涉及计算机技术领域,尤其涉及进程间通信技术领域。
背景技术
随着软件与硬件的发展,跨进程间通信越来越广泛,实现跨进程通信的方法也是层出不穷。其中,基于共享内存的跨进程通信是一种高效迅速的方法。
一种基于共享内存的跨进程通信方法为:进程A和进程B共享内存,由负责发送通知的进程A向内存写入数据,然后更新数据标识;而进程B周期性检查共享内存的数据标识,如有数据,则拷贝数据至进程空间,从而获得信息。
然而,这种跨进程通信方法仍不能满足需求,如何能够更加高效的实现跨进程通信仍需解决。
发明内容
本公开提供了一种用于跨进程事件处理的方法、装置、设备、存储介质及车辆。
根据本公开的一方面,提供了一种跨进程事件处理方法,包括:
在需要发送事件通知的情况下,获取进程集合的共享内存的进程锁;共享内存中包括第一对象;
在成功获取进程锁的情况下,在共享内存中建立第一对象与进程子集的关联关系;
基于共享内存的条件变量信号,唤醒进程集合中的处于休眠状态的多个进程,以通知处理休眠状态的多个进程中的进程子集基于第一对象获取事件通知的消息内容。
根据本公开的另一方面,提供了一种跨进程事件处理装置,包括:
第一获取模块,用于在需要发送事件通知的情况下,获取进程集合的共享内存的进程锁;共享内存中包括第一对象;
关联模块,用于在成功获取进程锁的情况下,在共享内存中建立第一对象与进程子集的关联关系;
通知模块,用于基于共享内存的条件变量信号,唤醒进程集合中的处于休眠状态的多个进程,以通知处理休眠状态的多个进程中的进程子集基于第一对象获取事件通知的消息内容。
根据本公开的另一方面,提供了一种电子设备,包括:
至少一个处理器;以及
与该至少一个处理器通信连接的存储器;其中,
该存储器存储有可被该至少一个处理器执行的指令,该指令被该至少一个处理器执行,以使该至少一个处理器能够执行本公开中任一实施例的方法。
根据本公开的另一方面,提供了一种存储有计算机指令的非瞬时计算机可读存储介质,其中,该计算机指令用于使该计算机执行根据本公开中任一实施例的方法。
根据本公开的另一方面,提供了一种计算机程序产品,包括计算机程序,该计算机程序在被处理器执行时实现根据本公开中任一实施例的方法。
根据本公开的另一方面,提供了一种车辆,包括上述的电子设备。
本公开所提供的事件处理方法,降低了周期性访问共享内存带来的资源消耗,提高了事件通知的效率解决了使用条件变量信号不能定向唤醒进程的弊端,完成了将事件通知定向传递给进程子集,即传递给指定一个其他进程,由此提高了跨进程事件通知的效率。
应当理解,本部分所描述的内容并非旨在标识本公开的实施例的关键或重要特征,也不用于限制本公开的范围。本公开的其它特征将通过以下的说明书而变得容易理解。
附图说明
附图用于更好地理解本方案,不构成对本公开的限定。其中:
图1是本公开一实施例提供的跨进程事件处理方法的流程示意图;
图2是本公开一实施例提供的一种可能的应用场景示意图;
图3本公开一实施例提供创建共享内存方法的流程示意图;
图4是本公开一实施例提供的一种可能的应用场景示意图;
图5是本公开又一实施例提供的又一跨进程事件处理方法的流程示意图;
图6是本公开又一实施例提供的又一跨进程事件处理方法的流程图;
图7是本公开一实施例提供的跨进程事件处理方法的装置图;
图8是用来实现本公开实施例的跨进程事件处理方法的电子设备的框图。
具体实施方式
以下结合附图对本公开的示范性实施例做出说明,其中包括本公开实施例的各种细节以助于理解,应当将它们认为仅仅是示范性的。因此,本领域普通技术人员应当认识到,可以对这里描述的实施例做出各种改变和修改,而不会背离本公开的范围。同样,为了清楚和简明,以下的描述中省略了对公知功能和结构的描述。
相关技术中跨进程通信时,以进程A和进程B为例,由进程A发送消息,进程B负责接收消息。进程B需要周期性查询共享内存。在没有消息更新时,这种周期性查询操作必然浪费资源。而且,当有重要消息需要及时送达时,因为周期性查询的限制,进程B也不能及时获得消息。由此,相关技术中跨进程通信方法在资源利用和效率上仍有待改善。
有鉴于此,本公开实施例中,提出了一种跨进程事件处理方法,通过该方法,能够实现事件的定向通知,无需周期性查询共享内存的数据标识。本公开实施例的进程集合中包括多个进程,进程集合中的多个进程基于共享内存通信,针对进程集合中的任一进程,均可执行如图1所示的跨进程时间处理方法,包括:
S101、在需要发送事件通知的情况下,获取共享内存的进程锁,该共享内存中包括第一对象。
S102、在成功获取进程锁的情况下,在共享内存中建立第一对象与进程子集的关联关系。
其中,进程子集是进程集合的子集,进程子集可包含一个或多个进程。
本公开实施例中共享内存中设有第一对象,该第一对象用于实现定向传递事件通知。即第一对象记录有需要获取事件通知的进程子集的标识。例如,如图2所示,进程A和、进程B和进程C共享内存,当进程A仅需要通知进程B获取事件通知的消息内容时,进程A会在共享内存建立进程B和第一对象的关联关系。进而,基于第一对象,进程B与第一对象关联,可确定需要获取事件通知的消息内容;而进程C与第一对象非关联,故此进程C可确定不需要获取事件通知的消息内容。
当然,当进程子集包括进程B和进程C时,第一对象会关联进程B和进程C,那么进程B和进程C均或获取事件通知的消息内容。
由此,本公开实施例为了简化通知的复杂度,本公开实施例中可基于条件变量信号通知处于休眠状态的进程去共享内存中读取第一对象,而后由第一对象关联的进程获取事件通知的消息内容。可实施为在S103中、基于共享内存的条件变量信号,唤醒进程集合中的处于休眠状态的进程,以通知处理休眠状态的多个进程中的进程子集基于第一对象获取事件通知的消息内容。
为便于理解,下面对如何基于条件变量信号通知处于休眠状态的进程进行举例说明。例如,条件变量对象的初始值为0,当条件变量对象的值为1时,将发送条件变量信号,唤醒处于休眠状态的进程。进程需要发送通知时,在完成获取进程锁、更改第一对象的操作后,将条件变量对象的值更改为1。处于休眠状态的进程被条件变量信号唤醒,获取事件通知。在唤醒完成后,条件变量对象将再次更改为0,等待下一次进程需要进行通知时再对其进行更改操作。本公开实施例中,任一进程获取进程锁即可基于条件变量信号将事件通知传递给其他进程,使得进程集合中每个进程都能够发送事件通知。通过条件变量信号通知其他进程获取消息内容,无需其他进程周期性访问共享内存,降低了周期性访问共享内存带来的资源消耗。而且,有事件通知需要发送时,通过条件变量信号能够及时通知给其他进程,其他进程无需等待自己的访问周期,可及时获取消息内容,提高了获取事件通知的效率。此外,通过建立起进程子集与第一关联对象的关联关系,解决了使用条件变量信号不能定向唤醒进程的弊端,完成了将事件通知定向传递给进程子集,提高了跨进程事件通知的效率。
本公开实施例中任一进程在发送事件通知时,仅改变条件变量对象的内容即可触发条件变量信号,实现将事件通知发送给其他进程。而事件通知的消息内容可以在共享内存中,也可以在共享内存之外的存储空间。将消息内容写入内存之前的存储空间的情况下,消息内容的写入和读取不需要占用共享内存,能够规避进程由于长时间写入或去掉共享内存的情况,提高共享内存的利用率。
在一些实施例中,为了灵活创建共享内存,本公开实施例对创建共享内存的进程没有硬性要求。原则上共享内存的任一进程均可自主独立的为进程集合创建共享内存。如图3所示,为本公开实施例中提供的创建方法,包括:
S301、基于共享内存的内存标识确定尚未创建共享内存的情况下,调用内存创建接口发送内存创建请求。
其中,进程集合中各进程享有共享内存的内存标识,不同进程集合使用的共享内存不同,自然不同进程集合的内存标识不同。同一进程集合中任一进程未连接共享内存时,可基于内存标识尝试获取共享内存的内存地址。若获取失败,则确定共享内存尚未创建。
此外,本公开实施例中,任一进程也可以在确定未连接内存标识对应的共享内存时,确定共享内存尚未创建。
其中,内存创建接口可以是系统提供的接口,如shm_open接口。当然也可以是系统提供的其他用于创建共享内存的接口,本公开实施例对此不作限定。
在共享内存尚未创建时,允许进程集合中的多个进程基于内存创建接口发送内存创建请求,故此仅有一个进程会被允许创建共享内存,而其他进程则会收到创建失败的通知。
实施时,可以由第一个发起共享内存创建请求的进程来创建共享内容。
S302、接收内存创建接口返回的响应信息。
基于前文所描述的内容,该响应信息会指示是否允许创建共享内容,其中多个进程中仅有一个进程被允许创建共享内存,而其他进程被拒绝创建共享内存,也即其他进程将接收到内存创建失败的响应信息。
S303、在响应信息指示允许创建共享内存的情况下,基于内存标识创建共享内存。
基于该共享内存的内存标识创建共享内存,并对共享内存进行初始化。
共享内存的初始化,可包括:
对共享内存的锁对象进行初始化,用来保证仅有一个进程能够获得进程锁,以此获得共享内存的访问权限;基于该锁对象,进程在访问共享内存的时候需要获得进程锁,退出共享内存的时候需要释放进程锁;
对共享内存的条件变量对象进行初始化,通过更改条件变量对象可实现发送条件变量信号给其他进程,以将事件通知传递给其他进程。
除上述两个对象为,还需要对第一对象进行初始化,例如将第一对象设置为默认值表示任一进程无需获取消息内容。
当然,上述例子只是用来解释基于需求确定需要初始化的对象。本公开实施例对需要初始化的对象不作具体限制,可根据需求配置需要初始化的对象。一些可初始化的其他对象将在后文适当位置提出,这里暂不赘述。
为了便于其他进程了解到共享内存的创建情况,本公开实施例在S304中,在开始初始化共享内存的情况下,将共享内存的状态设置为初始化中。
例如,共享内存中具有头标识信息,共享内存的状态可记录在该头标识信息中。则初始化共享内存时,首先初始化该头标识信息将为初始化中。由此,本公开实施例中,基于头标识信息可简单方便的维护共享内存的状态,在支持多进程创建同一共享内存时,能够便于各进程了解共享内存的创建情况。
S305,在共享内存初始化完成的情况下,将共享内存的状态更新为初始化完成。
也即,可将共享内存的头标识信息更新为初始化完成状态,由此实现共享内存的状态转变。
除了采用头标识信息来维护共享内存的状态,本公开实施例中,还可以提供共享内存的列表,当该列表中记录可用的共享内存的内存标识。其他进程可读取该列表的内容,在该列表包括共享内存的内存标识的情况下,说明共享内存可用,否则不可用。
在共享内存处于始化中的状态时,其他进程无法建立起与该共享内存的连接过程;在共享内存的处于初始化完成的状态时,其他进程才可与共享进程连接。
由此,本公开实施例中,基于共享内存的状态,其他进程可得知共享内存是否创建完成,以便于使用共享内存。共享内存的状态维护除了上面说明的实施方式外,任何维护共享内存状态的方法均适用于本公开实施例。
本公开实施例中,进程集合中任一进程可创建共享内存,实现了进程集合中多进程可竞争创建共享内存。基于内存标识创建共享内存,可以保证创建的共享内存的唯一性。任一进程均可创建共享内存,不需要依赖某一特定进程创建共享内存,由此使得共享内存的创建更加灵活。维护共享内存的状态信息,使其他进程在初始化共享内存过程中无法连接共享内存,初始化完成后方可连接共享内存,保证了共享内存的初始化可以顺利进行,保证跨进程间通信可以有序完成。
上面介绍了任一进程可创建共享内存的情况,下面介绍在收到的响应信息指示内存创建失败的情况下,如何建立与共享内存的连接,如图3所示,还包括:
S306、每间隔指定时长读取共享内存的状态直至共享内存的状态更新为初始化完成。
以头标识信息为例,在任一进程确定自身创建共享内存失败的情况下,每间隔指定时长读取共享内存的头标识信息,若头标识信息记录的状态为初始化中,则间隔指定时长继续读取头标识信息,直至头标识信息更新为初始化完成,结束循环读取头标识信息的操作。
在指定时长设置较短的情况下,进程几乎可以第一时间读取到共享内存初始化完成。当然指定时长的长短涉及了资源消耗,实施时可以根据实际需求设置指定时长。
S307、在共享内存的状态更新为初始化完成的情况下,将共享内存的内存地址映射到进程空间。
本公开实施例中,通过循环读取共享内存的状态,能够快速的知晓共享内存的情况,以便于及时获知可以连接共享内存的时机。在共享内存创建完成的情况下,通过将共享内存映射到自己的进程空间,建立与共享内存的连接,以便于保证跨进程通信能够有序的进行。
需要说明的是,创建共享内存的进程和其他进程是并行执行的,进程间没有严格的依赖关系,也降低了对时序的要求。例如,传统方法创建共享内存,是由一个特定的进程去创建共享内存,并发布成功创建内存的通知给其他进程,使用该共享内存的其他进程需要基于该通知建立与共享内存的连接。本公开实施例中进程集合中的进程均尝试创建共享内存,成功创建共享内存的进程使用共享内存中的头标识信息通知其他进程共享内存是否初始化完成;未能成功创建共享内存的进程循环读取共享内存的头标识信息,基于头标识信息的内容确定与共享内存建立起连接的时机。与传统方法相比,本实施例中使用共享内存的进程无需被动的收到通知后再建立与共享内存的连接,降低了对时序的要求。同时,无需调动其他服务通知其他进程共享内存已创建完成,也降低了对系统资源的使用。
需要说明的是,进程集合可以是事先约定好的多个进程。例如约定进程A、进程B、进程C和进程D可以共享内存。创建共享内存后,进程集合中任一进程无论是否启动均有访问共享内存的权限。例如共享内存创建之前,进程A、进程B、进程C均竞争创建共享内存,共享内存创建后进程A、进程B和进程C均连接共享内存。过了一段时间,进程D启动,需要访问共享内存,则进程D可以基于共享内存的内存标识,获取该共享内存的地址;然后,将共享内存的地址映射到自身的进程空间中,从而可访问共享内存。
对于没在进程集合中的其他进程E,为了安全起见,可以对不在进程集合中的进程进行身份验证,身份验证通过后,才可以访问共享内存。或者,在其他实施例中,可允许任一进程E访问共享内存,但事件通知的消息内容是加密的,其他进程获取消息内容也无法了解消息内容的信息。当然,如何保证跨进程通信安全,可根据实际需求选择合适的方案。
本公开实施例中,除了能够自主创建共享内存外,还可以自动释放共享内存。在共享内存与所有进程的连接均断开时,会释放共享内存,从而节约系统的资源。在一些实施例中,为了便于及时释放共享内存,共享内存中包含第二对象,第二对象用于记录连接共享内存的进程数。
前述对共享内存进行初始化的对象也可以包括该第二对象。初始化时,该第二对象可初始化为默认值。
任一进程在确定停止使用共享内存的情况下,将第二对象记录的进程数减少预设值;在减少预设值后第二对象记录的进程数为指定值的情况下,释放共享内存。该指定值例如为0,用于表示没有进程需要继续使用共享内存。
图4为进程加入和退出共享内存的示意图。图4示出了在没有进程使用共享内存,将共享内存释放的过程。如图4所示,m个进程正在使用共享内存,第二对象记录的进程数为m。另一个进程P也想使用共享内存,在将共享内存的地址映射到自身进程空间中,建立起与共享内存的连接,并将第二对象记录的进程数改为m+1。在全部进程与共享内存断开连接的情况下,最后一个与共享内存断开连接的进程Q,在断开与共享内存的连接时,将第二对象记录的进程数改为0,同时进程Q释放共享内存。
本公开实施例中,进程集合中任一进程除了可以发送事件通知,还可以接收事件通知,也即进程集合中进程间的通信是双向的。如图5所示,包括:
S501、在需要接收事件通知的情况下,获取共享内存的进程锁。
其中,任一进程在没有发出消息通知的需求下,均可以处于需要接收事件通知的情况。为了能够接收事件通知,本公开实施例中,需要获取进程锁,切换到能够接收事件通知的状态。即在S502中,在成功获取进程锁的情况下,调用共享内存的休眠方法进入休眠状态。本公开实施例中,进程处于休眠状态时,仅消耗极少量的系统资源,以此降低了资源的使用。且休眠状态下在S503中,在接收到条件变量信号的情况下,进入唤醒状态。
休眠状态下基于其他进程发送的条件变量信号,确定接收到进程通知,及时从休眠状态切换到唤醒状态。之后,在S504中,在唤醒状态下,处理事件通知。
本公开实施例中,任一进程可基于进程锁调用共享内存的休眠方法进入休眠状态,以切换到可接收其他进程的事件通知的状态。处于休眠状态,能够消耗较少的资源接收其他进程的事件通知,在能够及时获取事件通知的同时,还能够节约资源,提高资源利用率。
在一些实施例中,处理事件通知的操作,可实施为如图5所示,包括:
S5041、在唤醒状态下,获取共享内存的进程锁。
S5042、读取共享内存中的第一对象。
S5043、在确定与第一对象关联的情况下,释放进程锁,并基于事件通知获取消息内容。其中,消息内容存放在预设好的位置中。
S5044、在确定与第一对象不关联的情况下,返回执行调用共享内存的休眠方法进入休眠状态的操作,并释放进程锁。
综上,进程通过查看自身与第一对象是否关联来决定是否获取消息内容,实现了定向接收消息;与第一对象不关联时重新回到休眠状态,也减少了对系统资源的使用。
在进程获得进程锁对共享内存进行读/写操作时,一旦出现内部错误或是外部错误将会导致进程退出共享内存。在出现故障的情况下,若进程锁并没有被及时释放,将会导致进程锁的处于死锁状态,即任何进程将无法访问共享进程。此外,在进程锁死锁时,如果有进程想要对共享内存进行读/写操作,需要获得进程锁,但是进程锁一直没有被释放,该进程就会一直处于尝试获取进程锁的状态,还会耗费大量的资源。为了解决死锁问题,本公开实施例中还可以在获取进程锁前,获取系统时间,并设置超时时间;若在该超时时间内未获得进程锁,进程将结束获取进程锁的操作并报错;或者,进程继续尝试获取进程锁,当尝试次数到达一定次数仍未在超时时间内获取进程锁时,进程将退出获取进程锁的操作并报错;系统将针对死锁报错,进行死锁修复。
为便于对整个方案进行全面的理解,下面结合图6对本公开实施例中完成事件通知的整个过程进行介绍说明,其中,第一进程、第二进程、第三进程共三个进程在同一车辆上使用。完成事件处理,包括:
S601,在尚未创建共享内存的情况下,第一进程、第二进程和第三进程分别基于共享内存的内存标识调用内存创建接口发送内存创建请求。
假设,内存创建接口返回的响应信息中,由第一进程创建内存,其他进程创建内存失败。
则S602,第一进程基于内存标识创建共享内存,并初始化共享内存。
S603,第二进程和第三进程在共享内存初始化完成的情况下,将共享内存映射到各自的进程空间。
假设第一进程需要发送事件通知给第二进程。第二进程和第三进程需要获取事件通知。则S604,第二进程和第三进程分别进入休眠状态。
其中,S604进入休眠状态的方法包括:
S6041,设置系统超时时间。
S6042,获取进程锁。
S6043,超时时间内获取进程锁失败,退出操作,并间隔指定时长返回执行S6041。
S6044,超时时间内获取到进程锁,调用共享内存的休眠方法进入休眠状态,并释放进程锁。
S605,第一进程获取进程锁后,设置第一对象关联第二进程,并基于条件变量信号唤醒第二进程和第三进程,之后释放进程锁。
S606,第二进程和第三进程唤醒后,分别获取进程锁读取共享内存中的第一对象。
S607,第二进程确定和第一对象关联,读取事件通知的消息内容。
S608,第三进程确定和第一对象不关联,返回执行S6041。
基于相同的技术构思,本公开实施例还提供了.一种跨进程事件处理装置,如图7所示,该装置包括:
获取模块701,用于在需要发送事件通知的情况下,获取进程集合的共享内存的进程锁;共享内存中包括第一对象;
关联模块702,用于在成功获取进程锁的情况下,在共享内存中建立第一对象与进程子集的关联关系;
通知模块703,用于基于共享内存的条件变量信号,唤醒进程集合中的处于休眠状态的多个进程,以通知处理休眠状态的多个进程中的进程子集基于第一对象获取事件通知的消息内容。
在一些可能的实施例中,该装置还包括创建模块,用于基于以下装置方法创建所述共享内存:
基于共享内存的内存标识确定尚未创建共享内存的情况下,调用内存创建接口发送内存创建请求;
接收内存创建接口返回的响应信息;
在响应信息指示允许创建共享内存的情况下,基于内存标识创建共享内存;
在开始初始化共享内存的情况下,将共享内存的状态设置为初始化中;
在共享内存初始化完成的情况下,将共享内存的状态更新为初始化完成。
在一些可能的实施例中,该装置还包括:
循环读取模块,用于在响应信息指示内存创建失败的情况下,每间隔指定时长读取共享内存的状态直至共享内存的状态更新为初始化完成;
映射模块,用于在共享内存的状态更新为初始化完成的情况下,将共享内存的内存地址映射到进程空间。
在一些可能的实施例中共享内存中包括头标识信息,共享内存的状态记录在头标识信息中。
在一些实施例中,共享内存中包含第二对象,第二对象用于记录连接共享内存的进程数,如图8所示,该装置还包括:
记录模块,用于在确定停止使用共享内存的情况下,将第二对象记录的进程数减少预设值;
释放模块,用于在减少预设值后第二对象记录的进程数为指定值的情况下,释放共享内存。
在一些可能的实施方式中,该装置还包括:
获取模块,用于在需要接收事件通知的情况下,获取共享内存的进程锁;
休眠模块,用于在成功获取进程锁的情况下,调用共享内存的休眠装置进入休眠状态;
唤醒模块,用于在接收到条件变量信号的情况下,进入唤醒状态;
处理模块,用于在唤醒状态下,处理事件通知。
在一些实施例中,处理模块,包括:
获取子模块,用于在唤醒状态下,获取共享内存的进程锁;
读取子模块,用于读取共享内存中的第一对象;
获取消息子模块,用于在确定与第一对象关联的情况下,释放进程锁,并基于事件通知获取消息内容;
休眠子模块,用于在确定与第一对象不关联的情况下,返回执行调用共享内存的休眠装置进入休眠状态的操作,并释放进程锁。
本公开实施例的装置的各模块、子模块的具体功能和示例的描述,可以参见上述方法实施例中对应步骤的相关描述,在此不再赘述。
根据本公开的实施例,本公开还提供了一种车辆,包括用于跨进程事件处理方法的电子设备。在一些实施方式中,本公开实施例提出的车辆可以为任意装有跨进程事件处理装置的车辆。
根据本公开的实施例,本公开还提供了一种电子设备、一种可读存储介质和一种计算机程序产品。
图8示出了可以用来实施本公开的实施例的示例电子设备800的示意性框图。电子设备旨在表示各种形式的数字计算机,诸如,膝上型计算机、台式计算机、工作台、个人数字助理、服务器、刀片式服务器、大型计算机、和其它适合的计算机。电子设备还可以表示各种形式的移动装置,诸如,个人数字助理、蜂窝电话、智能电话、可穿戴设备和其它类似的计算装置。本文所示的部件、它们的连接和关系、以及它们的功能仅仅作为示例,并且不意在限制本文中描述的和/或者要求的本公开的实现。
如图8所示,设备800包括计算单元801,其可以根据存储在只读存储器(ROM)802中的计算机程序或者从存储单元808加载到随机访问存储器(RAM)803中的计算机程序,来执行各种适当的动作和处理。在RAM 803中,还可存储设备800操作所需的各种程序和数据。计算单元801、ROM 802以及RAM 803通过总线804彼此相连。输入/输出(I/O)接口805也连接至总线804。
设备800中的多个部件连接至I/O接口805,包括:输入单元806,例如键盘、鼠标等;输出单元807,例如各种类型的显示器、扬声器等;存储单元808,例如磁盘、光盘等;以及通信单元809,例如网卡、调制解调器、无线通信收发机等。通信单元809允许设备800通过诸如因特网的计算机网络和/或各种电信网络与其他设备交换信息/数据。
计算单元801可以是各种具有处理和计算能力的通用和/或专用处理组件。计算单元801的一些示例包括但不限于中央处理单元(CPU)、图形处理单元(GPU)、各种专用的人工智能(AI)计算芯片、各种运行机器学习模型算法的计算单元、数字信号处理器(DSP)、以及任何适当的处理器、控制器、微控制器等。计算单元801执行上文所描述的各个方法和处理,例如跨进程事件处理方法。例如,在一些实施例中,跨进程事件处理方法可被实现为计算机软件程序,其被有形地包含于机器可读介质,例如存储单元808。在一些实施例中,计算机程序的部分或者全部可以经由ROM 802和/或通信单元809而被载入和/或安装到设备800上。当计算机程序加载到RAM 803并由计算单元801执行时,可以执行上文描述的跨进程事件处理方法的一个或多个步骤。备选地,在其他实施例中,计算单元801可以通过其他任何适当的方式(例如,借助于固件)而被配置为执行跨进程事件处理方法。
本文中以上描述的系统和技术的各种实施方式可以在数字电子电路系统、集成电路系统、现场可编程门阵列(FPGA)、专用集成电路(ASIC)、专用标准产品(ASSP)、芯片上系统的系统(SOC)、复杂可编程逻辑设备(CPLD)、计算机硬件、固件、软件、和/或它们的组合中实现。这些各种实施方式可以包括:实施在一个或者多个计算机程序中,该一个或者多个计算机程序可在包括至少一个可编程处理器的可编程系统上执行和/或解释,该可编程处理器可以是专用或者通用可编程处理器,可以从存储系统、至少一个输入装置、和至少一个输出装置接收数据和指令,并且将数据和指令传输至该存储系统、该至少一个输入装置、和该至少一个输出装置。
用于实施本公开的方法的程序代码可以采用一个或多个编程语言的任何组合来编写。这些程序代码可以提供给通用计算机、专用计算机或其他可编程数据处理装置的处理器或控制器,使得程序代码当由处理器或控制器执行时使流程图和/或框图中所规定的功能/操作被实施。程序代码可以完全在机器上执行、部分地在机器上执行,作为独立软件包部分地在机器上执行且部分地在远程机器上执行或完全在远程机器或服务器上执行。
在本公开的上下文中,机器可读介质可以是有形的介质,其可以包含或存储以供指令执行系统、装置或设备使用或与指令执行系统、装置或设备结合地使用的程序。机器可读介质可以是机器可读信号介质或机器可读储存介质。机器可读介质可以包括但不限于电子的、磁性的、光学的、电磁的、红外的、或半导体系统、装置或设备,或者上述内容的任何合适组合。机器可读存储介质的更具体示例会包括基于一个或多个线的电气连接、便携式计算机盘、硬盘、随机存取存储器(RAM)、只读存储器(ROM)、可擦除可编程只读存储器(EPROM或快闪存储器)、光纤、便捷式紧凑盘只读存储器(CD-ROM)、光学储存设备、磁储存设备、或上述内容的任何合适组合。
为了提供与用户的交互,可以在计算机上实施此处描述的系统和技术,该计算机具有:用于向用户显示信息的显示装置(例如,CRT(阴极射线管)或者LCD(液晶显示器)监视器);以及键盘和指向装置(例如,鼠标或者轨迹球),用户可以通过该键盘和该指向装置来将输入提供给计算机。其它种类的装置还可以用于提供与用户的交互;例如,提供给用户的反馈可以是任何形式的传感反馈(例如,视觉反馈、听觉反馈、或者触觉反馈);并且可以用任何形式(包括声输入、语音输入、或者触觉输入)来接收来自用户的输入。
可以将此处描述的系统和技术实施在包括后台部件的计算系统(例如,作为数据服务器)、或者包括中间件部件的计算系统(例如,应用服务器)、或者包括前端部件的计算系统(例如,具有图形用户界面或者网络浏览器的用户计算机,用户可以通过该图形用户界面或者该网络浏览器来与此处描述的系统和技术的实施方式交互)、或者包括这种后台部件、中间件部件、或者前端部件的任何组合的计算系统中。可以通过任何形式或者介质的数字数据通信(例如,通信网络)来将系统的部件相互连接。通信网络的示例包括:局域网(LAN)、广域网(WAN)和互联网。
计算机系统可以包括客户端和服务器。客户端和服务器一般远离彼此并且通常通过通信网络进行交互。通过在相应的计算机上运行并且彼此具有客户端-服务器关系的计算机程序来产生客户端和服务器的关系。服务器可以是云服务器,也可以为分布式系统的服务器,或者是结合了区块链的服务器。
应该理解,可以使用上面所示的各种形式的流程,重新排序、增加或删除步骤。例如,本公开中记载的各步骤可以并行地执行也可以顺序地执行也可以不同的次序执行,只要能够实现本公开公开的技术方案所期望的结果,本文在此不进行限制。
上述具体实施方式,并不构成对本公开保护范围的限制。本领域技术人员应该明白的是,根据设计要求和其他因素,可以进行各种修改、组合、子组合和替代。任何在本公开的原则之内所作的修改、等同替换和改进等,均应包含在本公开保护范围之内。
Claims (18)
1.一种跨进程事件处理方法,包括:
在需要发送事件通知的情况下,获取进程集合的共享内存的进程锁;所述共享内存中包括第一对象;
在成功获取所述进程锁的情况下,在所述共享内存中建立所述第一对象与进程子集的关联关系;
基于所述共享内存的条件变量信号,唤醒所述进程集合中的处于休眠状态的多个进程,以通知所述处理休眠状态的多个进程中的所述进程子集基于所述第一对象获取所述事件通知的消息内容。
2.根据权利要求1所述的方法,还包括基于以下方法创建所述共享内存:
基于所述共享内存的内存标识确定尚未创建所述共享内存的情况下,调用内存创建接口发送内存创建请求;
接收所述内存创建接口返回的响应信息;
在所述响应信息指示允许创建所述共享内存的情况下,基于所述内存标识创建所述共享内存;
在开始初始化所述共享内存的情况下,将所述共享内存的状态设置为初始化中;
在所述共享内存初始化完成的情况下,将所述共享内存的状态更新为初始化完成。
3.根据权利要求2所述的方法,还包括:
在所述响应信息指示内存创建失败的情况下,每间隔指定时长读取所述共享内存的状态直至所述共享内存的状态更新为初始化完成;
在所述共享内存的状态更新为初始化完成的情况下,将所述共享内存的内存地址映射到进程空间。
4.根据权利要求2或3所述的方法,其中,所述共享内存中包括头标识信息,所述共享内存的状态记录在所述头标识信息中。
5.根据权利要求1-4中任一项所述的方法,其中,所述共享内存中包含第二对象,所述第二对象用于记录连接所述共享内存的进程数,还包括:
在确定停止使用所述共享内存的情况下,将所述第二对象记录的进程数减少预设值;
在减少所述预设值后所述第二对象记录的进程数为指定值的情况下,释放所述共享内存。
6.根据权利要求1-5中任一项所述的方法,还包括:
在需要接收事件通知的情况下,获取所述共享内存的进程锁;
在成功获取所述进程锁的情况下,调用所述共享内存的休眠方法进入休眠状态;
在接收到条件变量信号的情况下,进入唤醒状态;
在唤醒状态下,处理所述事件通知。
7.根据权利要求6所述的方法,其中,所述在唤醒状态下,处理所述事件通知,包括:
在唤醒状态下,获取所述共享内存的进程锁;
读取所述共享内存中的第一对象;
在确定与所述第一对象关联的情况下,释放所述进程锁,并基于所述事件通知获取消息内容;
在确定与所述第一对象不关联的情况下,返回执行所述调用所述共享内存的休眠方法进入休眠状态的操作,并释放所述进程锁。
8.一种跨进程事件处理装置,所述装置包括:
第一获取模块,用于在需要发送事件通知的情况下,获取所述进程集合的共享内存的进程锁;所述共享内存中包括第一对象;
关联模块,用于在成功获取所述进程锁的情况下,在所述共享内存中建立所述第一对象与进程子集的关联关系;
通知模块,用于基于所述共享内存的条件变量信号,唤醒所述进程集合中的处于休眠状态的多个进程,以通知所述处理休眠状态的多个进程中的所述进程子集基于所述第一对象获取所述事件通知的消息内容。
9.根据权利要求8所述的装置,还包括创建模块,用于基于以下方法创建所述共享内存:
基于所述共享内存的内存标识确定尚未创建所述共享内存的情况下,调用内存创建接口发送内存创建请求;
接收所述内存创建接口返回的响应信息;
在所述响应信息指示允许创建所述共享内存的情况下,基于所述内存标识创建所述共享内存;
在开始初始化所述共享内存的情况下,将所述共享内存的状态设置为初始化中;
在所述共享内存初始化完成的情况下,将所述共享内存的状态更新为初始化完成。
10.根据权利要求9所述的装置,还包括:
循环读取模块,用于在所述响应信息指示内存创建失败的情况下,每间隔指定时长读取所述共享内存的状态直至所述共享内存的状态更新为初始化完成;
映射模块,用于在所述共享内存的状态更新为初始化完成的情况下,将所述共享内存的内存地址映射到进程空间。
11.根据权利要求9或10所述的装置,其中,所述共享内存中包括头标识信息,所述共享内存的状态记录在所述头标识信息中。
12.根据权利要求8-11中任一项所述的装置,其中,所述共享内存中包含第二对象,所述第二对象用于记录连接所述共享内存的进程数,还包括:
记录模块,用于在确定停止使用所述共享内存的情况下,将所述第二对象记录的进程数减少预设值;
释放模块,用于在减少所述预设值后所述第二对象记录的进程数为指定值的情况下,释放所述共享内存。
13.根据权利要求8-12中任一项所述的装置,还包括:
第二获取模块,用于在需要接收事件通知的情况下,获取所述共享内存的进程锁;
休眠模块,用于在成功获取所述进程锁的情况下,调用所述共享内存的休眠装置进入休眠状态;
唤醒模块,用于在接收到条件变量信号的情况下,进入唤醒状态;
处理模块,用于在唤醒状态下,处理所述事件通知。
14.根据权利要求13所述的装置,其中,所述处理模块,包括:
获取子模块,用于在唤醒状态下,获取所述共享内存的进程锁;
读取子模块,用于读取所述共享内存中的第一对象;
获取消息子模块,用于在确定与所述第一对象关联的情况下,释放所述进程锁,并基于所述事件通知获取消息内容;
休眠子模块,用于在确定与所述第一对象不关联的情况下,返回执行所述调用所述共享内存的休眠装置进入休眠状态的操作,并释放所述进程锁。
15.一种电子设备,包括:
至少一个处理器;以及
与所述至少一个处理器通信连接的存储器;其中,
所述存储器存储有可被所述至少一个处理器执行的指令,所述指令被所述至少一个处理器执行,以使所述至少一个处理器能够执行权利要求1-7中任一项所述的方法。
16.一种存储有计算机指令的非瞬时计算机可读存储介质,其中,所述计算机指令用于使所述计算机执行根据权利要求1-7中任一项所述的方法。
17.一种计算机程序产品,包括计算机程序,所述计算机程序在被处理器执行时实现根据权利要求1-7中任一项所述的方法。
18.一种车辆,包括权利要求15所述的电子设备。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202211018251.3A CN115373874A (zh) | 2022-08-24 | 2022-08-24 | 跨进程事件处理方法、装置、电子设备、存储介质及车辆 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202211018251.3A CN115373874A (zh) | 2022-08-24 | 2022-08-24 | 跨进程事件处理方法、装置、电子设备、存储介质及车辆 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN115373874A true CN115373874A (zh) | 2022-11-22 |
Family
ID=84067607
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202211018251.3A Pending CN115373874A (zh) | 2022-08-24 | 2022-08-24 | 跨进程事件处理方法、装置、电子设备、存储介质及车辆 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN115373874A (zh) |
-
2022
- 2022-08-24 CN CN202211018251.3A patent/CN115373874A/zh active Pending
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US9311110B2 (en) | Techniques to initialize from a remotely accessible storage device | |
CN108616382B (zh) | 升级网卡固件的方法、装置、网卡和设备 | |
US10102170B2 (en) | System and method for providing input/output functionality by an I/O complex switch | |
US20110307639A1 (en) | Virtual serial port management system and method | |
US20130031538A1 (en) | Updating Secure Pre-boot Firmware In A Computing System In Real-time | |
US8631414B2 (en) | Distributed resource management in a portable computing device | |
US20080209199A1 (en) | Boot negotiation among multiple boot-capable devices | |
US10417062B2 (en) | Method and apparatus of unloading out of memory processing flow to user space | |
US10824724B2 (en) | Detecting runtime tampering of UEFI images in an information handling system | |
WO2021077742A1 (zh) | 一种业务处理方法、系统、装置及可读存储介质 | |
CN114564435A (zh) | 异构多核芯片的核间通信方法、装置及介质 | |
CN114936173A (zh) | 一种eMMC器件的读写方法、装置、设备和存储介质 | |
CN114697194A (zh) | 阻塞式事件通知方法及装置 | |
US20150358213A1 (en) | Systems and methods for sharing a single firmware image in a chassis configured to receive a plurality of modular information handling systems | |
US11068430B2 (en) | Configuration parameter transfer | |
US20090307403A1 (en) | System for executing system management interrupts and methods thereof | |
CN111427689A (zh) | 集群保活方法、装置及存储介质 | |
US10102032B2 (en) | Fast transitions for massively parallel computing applications | |
US10911547B2 (en) | Systems and methods for SMB monitor dialect | |
US10579575B2 (en) | Systems and methods of management console user interface pluggability | |
CN115373874A (zh) | 跨进程事件处理方法、装置、电子设备、存储介质及车辆 | |
US11347522B2 (en) | API dynamic processing in HCI environment | |
US10348592B2 (en) | Systems and methods for dynamic availability of executable endpoints | |
US10303568B2 (en) | Systems and methods for high availability of management controllers | |
US8620991B2 (en) | Technologies for detecting erroneous resumptions in a continuation based runtime |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination |