本发明涉及通信,尤其涉及一种共享内存的处理方法、装置、电子设备及存储介质。
背景技术:
1、随着技术的发展,自动驾驶技术逐渐成熟。在自动驾驶系统中,通常会配备多种传感器,比如雷达,摄像头等,传感器的数据被采集后,数据会在自动驾驶系统内部的各个模块组成的多条流水线上流转并加工处理。
2、目前,自动驾驶系统中一般采用多核处理器,从而使得多任务处理能力更强。并且,在多核处理器的基础上,自动驾驶系统,还可以结合大数据量通信时采用的共享内存技术,从而达到低延时、高带宽的效果。
3、然而,在实现本发明过程中,发明人发现:目前一般的共享内存技术只适用于串行使用的场景,比如基于开源操作系统(linux)的多进程共享内存机制,在使用时,一端进程必须点到点地显式通过进程间通信将共享内存的相关信息发送给对端进程,对端进程收到共享内存信息后再映射到本进程的虚拟地址空间。例如存在a、b、c、d 四个进程,其中,a进程申请成功共享内存之后,发送给b进程共享内存的相关信息之后,才能再发送给c进程和d进程。
4、可见,目前多进程间必须要进行同步通信,而且要串行使用共享内存 ,无法满足多进程或多任务并行处理的场景。
技术实现思路
1、本发明实施例的目的是提供一种共享内存的处理方法、装置、电子设备及存储介质,以解决现有技术中共享内存的相关信息的同步方法,无法满足多进程或多任务并行处理的场景的问题。
2、一方面,提供了一种共享内存的处理方法,所述方法包括:
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、在一种可能实施方式中,所述至少一个第二对象包括第三对象和第四对象中的至少一个;
40、所述第三对象对应的核心运行的操作系统与所述第一对象对应的核心运行的操作系统相同;
41、所述第四对象对应的核心运行的操作系统与所述第一对象对应的核心运行的操作系统不同。
42、在一种可能实施方式中,所述装置还包括如下中至少一个模块:
43、第一处理模块,用于通过所述至少一个第二对象中的至少部分第二对象,响应于所述第一组播消息,根据所述共享内存的相关信息更新本地列表,其中,所述本地列表中包括不同对象申请的共享内存的相关信息;
44、第二处理模块,用于通过所述至少一个第二对象中的至少部分第二对象,响应于所述第一组播消息,将所述共享内存的相关信息映射至该第二对象的虚拟地址空间。
45、在一种可能实施方式中,所述至少一个第二对象与所述第一对象属于同一分组,所述至少一个第二对象包括第三对象,所述第三对象对应的核心运行的操作系统与所述第一对象对应的核心运行的操作系统相同;
46、所述同步模块包括:
47、启动子模块,用于在所述第一对象内启动服务器线程;
48、第二发送子模块,用于通过所述服务器线程发送第二组播消息,其中,所述第二组播消息携带有所述共享内存的相关信息和所述服务器线程的标识信息;
49、第一处理子模块,用于通过所述第三对象接收所述第二组播消息,并响应于所述第二组播消息,在所述第三对象内启动客户端线程,根据所述标识信息,将所述客户端线程与所述服务器线程连接;
50、第二处理子模块,用于通过所述服务器线程,将所述共享内存的相关信息映射至所述第三对象的虚拟地址空间中得到目标信息,并将所述目标信息发送给所述客户端线程;
51、第二接收子模块,用于通过所述客户端线程接收所述目标信息,并保存所述目标信息。
52、在一种可能实施方式中,所述至少一个第二对象还包括第四对象,所述第四对象对应的核心运行的操作系统与所述第一对象对应的核心运行的操作系统不同;
53、所述同步模块还包括:
54、第三接收子模块,用于通过所述第四对象接收所述第二组播消息。
55、在一种可能实施方式中,所述装置还包括:
56、第三处理模块,用于通过所述第四对象响应于所述第二组播消息,根据所述共享内存的相关信息更新本地列表,其中,所述本地列表中包括不同对象申请的共享内存的相关信息。
57、在一种可能实施方式中,所述装置还包括:
58、第一搬移模块,用于将所述共享内存中的待计算数据搬至高速缓存中;
59、第四处理模块,用于对所述待计算数据进行计算处理,并将所述待计算数据的计算结果存储至所述高速缓存中;
60、第二搬移模块,用于将所述计算结果从所述高速缓存搬至影子共享内存中;
61、其中,所述高速缓存的访问速度大于所述共享内存的访问速度。
62、再一方面,提供了一种电子设备,包括:
63、处理器;
64、用于存储所述处理器可执行指令的存储器;
65、其中,所述处理器被配置为执行以实现上述所述的共享内存的处理方法所执行的操作。
66、再一方面,提供了一种处理器可读存储介质,所述处理器可读存储介质存储有计算机程序,所述计算机程序用于使所述处理器执行上述所述的共享内存的处理方法。
67、上述技术方案中的一个技术方案具有如下优点或有益效果:
68、在本发明的一个实施例中,能够在第一对象申请共享内存的情况下,通过组播方式或者服务器客户端模型,将共享内存的相关信息并行同步给至少一个第二对象,其中,所述对象为操作系统中的程序运行单元。由此可见,在本发明的一个实施例中,如果操作系统中的某个程序运行单元,例如进程或任务,申请了共享内存,则可以通过组播方式或者服务器客户端模型,将该共享内存的相关信息并行同步给其他进程或任务,因此,本发明的一个实施例可以实现共享内存的相关信息的并行同步,降低了使用共享内存时同步通信带来的通信耗时,并且为多进程或多任务并行处理的场景提供了基础。
69、应当理解的是,以上的一般描述和后文的细节描述仅是示例性和解释性的,并不能限制本发明。