首页 / 专利库 / 电脑零配件 / 固件 / 软件 / 系统软件 / 操作系统 / 进程 / 一种基于共享内存的跨进程通信方法及装置

一种基于共享内存的跨进程通信方法及装置

阅读:203发布:2024-02-01

专利汇可以提供一种基于共享内存的跨进程通信方法及装置专利检索,专利查询,专利分析的服务。并且本 发明 实施例 公开了一种基于共享内存的跨 进程 通信方法及装置,方法包括:根据 操作系统 的类型确定工作模式,并根据所述工作模式确定进程通信的内存区域;若判断获知所述内存区域内不存在数据,则创建共享内存区域;若判断获知所述内存区域内已经存在数据,则将所述数据添加至所述共享内存区域;通过所述共享内存区域实现各进程的通信。本发明实施例通过创建共享内存区域来存储数据,并通过共享内存区域实现各进程的通信,能够提高各进程之间的通信效率,规避多进程之间的抢占,实现轻量的数据共享,大大节省研发人员的研发时间。,下面是一种基于共享内存的跨进程通信方法及装置专利的具体信息内容。

1.一种基于共享内存的跨进程通信方法,其特征在于,包括:
根据操作系统的类型确定工作模式,并根据所述工作模式确定进程通信的内存区域;
若判断获知所述内存区域内不存在数据,则创建共享内存区域;
若判断获知所述内存区域内已经存在数据,则将所述数据添加至所述共享内存区域;
通过所述共享内存区域实现各进程的通信,以规避多进程之间的抢占。
2.根据权利要求1所述的方法,其特征在于,所述通过所述共享内存区域实现各进程的通信,具体包括:
通过所述共享内存区域实现各进程的消息分发、数据传输及同步。
3.根据权利要求1所述的方法,其特征在于,所述通过所述共享内存区域实现各进程的通信,具体包括:
通过所述共享内存区域获知当前终端中的进程数量。
4.根据权利要求1所述的方法,其特征在于,所述若判断获知所述内存区域内不存在数据,则创建共享内存区域,具体包括:
若判断获知所述内存区域内不存在数据,则通过原子同步方法创建共享内存区域。
5.一种基于共享内存的跨进程通信装置,其特征在于,包括:
区域确定模,用于根据操作系统的类型确定工作模式,并根据所述工作模式确定进程通信的内存区域;
区域创建模块,用于若判断获知所述内存区域内不存在数据,则创建共享内存区域;
数据添加模块,用于若判断获知所述内存区域内已经存在数据,则将所述数据添加至所述共享内存区域;
进程通信模块,用于通过所述共享内存区域实现各进程的通信,以规避多进程之间的抢占。
6.根据权利要求5所述的装置,其特征在于,所述进程通信模块具体用于通过所述共享内存区域实现各进程的消息分发、数据传输及同步。
7.根据权利要求5所述的装置,其特征在于,所述进程通信模块具体用于通过所述共享内存区域获知当前终端中的进程数量。
8.根据权利要求5所述的装置,其特征在于,所述区域创建模块具体用于若判断获知所述内存区域内不存在数据,则通过原子同步方法创建共享内存区域。
9.一种电子设备,其特征在于,包括:
至少一个处理器;以及
与所述处理器通信连接的至少一个存储器,其中:
所述存储器存储有可被所述处理器执行的程序指令,所述处理器调用所述程序指令能够执行如权利要求1至4任一所述的方法。
10.一种非暂态计算机可读存储介质,其特征在于,所述非暂态计算机可读存储介质存储计算机程序,所述计算机程序使所述计算机执行如权利要求1至4任一所述的方法。

说明书全文

一种基于共享内存的跨进程通信方法及装置

技术领域

[0001] 本发明实施例涉及计算机技术领域,具体涉及一种基于共享内存的跨进程通信方法及装置。

背景技术

[0002] 随着计算机技术的发展,终端内各进程的通信越来越频繁,随之而产生越来越多的问题,例如进程之间的抢占问题;同时也产生了很多相应的技术,例如Linux操作系统的内存管理、Linux/Windows/Unix等操作系统的文件系统、Java的内存模型、Java的垃圾回收机制、Java的IO模型等相关技术,主要针对开发人员中在面对同一操作系统环境下多个不同的同源进程之间的相互通讯问题。
[0003] 在实现本发明实施例的过程中,发明人发现现有技术主要体现在语言级别(Java的同步机制)和开发工具包(Java的Lock)两种方式,这两种方式都是通过应用层的线程同步来实现数据共享,都是针对单个进程的多线程问题,而在进程之间的同步中,尚无一个优秀的解决方案。

发明内容

[0004] 由于现有方法存在上述问题,本发明实施例提出一种基于共享内存的跨进程通信方法及装置。
[0005] 第一方面,本发明实施例提出一种基于共享内存的跨进程通信方法,包括:
[0006] 根据操作系统的类型确定工作模式,并根据所述工作模式确定进程通信的内存区域;
[0007] 若判断获知所述内存区域内不存在数据,则创建共享内存区域;
[0008] 若判断获知所述内存区域内已经存在数据,则将所述数据添加至所述共享内存区域;
[0009] 通过所述共享内存区域实现各进程的通信,以规避多进程之间的抢占。
[0010] 可选地,所述通过所述共享内存区域实现各进程的通信,具体包括:
[0011] 通过所述共享内存区域实现各进程的消息分发、数据传输及同步。
[0012] 可选地,所述通过所述共享内存区域实现各进程的通信,具体包括:
[0013] 通过所述共享内存区域获知当前终端中的进程数量。
[0014] 可选地,所述若判断获知所述内存区域内不存在数据,则创建共享内存区域,具体包括:
[0015] 若判断获知所述内存区域内不存在数据,则通过原子同步方法创建共享内存区域。
[0016] 第二方面,本发明实施例还提出一种基于共享内存的跨进程通信装置,包括:
[0017] 区域确定模,用于根据操作系统的类型确定工作模式,并根据所述工作模式确定进程通信的内存区域;
[0018] 区域创建模块,用于若判断获知所述内存区域内不存在数据,则创建共享内存区域;
[0019] 数据添加模块,用于若判断获知所述内存区域内已经存在数据,则将所述数据添加至所述共享内存区域;
[0020] 进程通信模块,用于通过所述共享内存区域实现各进程的通信,以规避多进程之间的抢占。
[0021] 可选地,所述进程通信模块具体用于通过所述共享内存区域实现各进程的消息分发、数据传输及同步。
[0022] 可选地,所述进程通信模块具体用于通过所述共享内存区域获知当前终端中的进程数量。
[0023] 可选地,所述区域创建模块具体用于若判断获知所述内存区域内不存在数据,则通过原子同步方法创建共享内存区域。
[0024] 第三方面,本发明实施例还提出一种电子设备,包括:
[0025] 至少一个处理器;以及
[0026] 与所述处理器通信连接的至少一个存储器,其中:
[0027] 所述存储器存储有可被所述处理器执行的程序指令,所述处理器调用所述程序指令能够执行上述方法。
[0028] 第四方面,本发明实施例还提出一种非暂态计算机可读存储介质,所述非暂态计算机可读存储介质存储计算机程序,所述计算机程序使所述计算机执行上述方法。
[0029] 由上述技术方案可知,本发明实施例通过创建共享内存区域来存储数据,并通过共享内存区域实现各进程的通信,能够提高各进程之间的通信效率,实现轻量的数据共享,大大节省研发人员的研发时间。附图说明
[0030] 为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些图获得其他的附图。
[0031] 图1为本发明一实施例提供的一种基于共享内存的跨进程通信方法的流程示意图;
[0032] 图2为本发明另一实施例提供的一种基于共享内存的跨进程通信方法的流程示意图;
[0033] 图3为本发明一实施例提供的一种基于共享内存的跨进程通信装置的结构示意图;
[0034] 图4为本发明一实施例提供的电子设备的逻辑框图

具体实施方式

[0035] 下面结合附图,对本发明的具体实施方式作进一步描述。以下实施例仅用于更加清楚地说明本发明的技术方案,而不能以此来限制本发明的保护范围。
[0036] 图1示出了本实施例提供的一种基于共享内存的跨进程通信方法的流程示意图,包括:
[0037] S101、根据操作系统的类型确定工作模式,并根据所述工作模式确定进程通信的内存区域。
[0038] 其中,所述操作系统的类型包括Windows、Linux等操作系统。
[0039] S102、若判断获知所述内存区域内不存在数据,则创建共享内存区域。
[0040] 其中,所述共享内存区域为CPU可直接访问的一片特殊的存储区域,其读取速率比普通的内存区域大很多,能够实现CPU的快速读取。在Windows系统中,该共享内存区域一般称为页面缓存空间,在Linux系统中,该共享内存区域一般称为内存映射文件。
[0041] S103、若判断获知所述内存区域内已经存在数据,则将所述数据添加至所述共享内存区域。
[0042] S104、通过所述共享内存区域实现各进程的通信,以规避多进程之间的抢占。
[0043] 本实施例通过创建共享内存区域来存储数据,并通过共享内存区域实现各进程的通信,能够提高各进程之间的通信效率,实现轻量的数据共享,大大节省研发人员的研发时间。
[0044] 进一步地,在上述方法实施例的基础上,S104具体包括:
[0045] 通过所述共享内存区域实现各进程的消息分发、数据传输及同步。
[0046] 通过共享内存区域,能够实现各进程快速地进行消息分发、数据传输及同步。通过整理需求,总结出了一套多进程之间的通讯、信息同步机制,可在最高效率上解决开发人员在任务系统中服务发现、进程通讯问题,节省开发人员的时间。
[0047] 进一步地,在上述方法实施例的基础上,S104具体包括:
[0048] 通过所述共享内存区域获知当前终端中的进程数量。
[0049] 通过共享内存区域方便研发人员获知当前终端中的进程数量,加快研发进度。
[0050] 具体地,本实施例可以从多个层面上解决开发人员的跨进程通讯、进程同步、服务发现中问题:例如,通过简单的API调用,就知道本物理机部署了多少的当前服务的进程,同时可实现本物理机的消息分发、通讯及同步;而且使得开发人员在处理上述操作的时候,无需关心多进程之间的抢占、同步问题;并且开发人员在使用本实施例提供的方法之后,可轻松避免频繁的IO问题。
[0051] 进一步地,在上述方法实施例的基础上,S102具体包括:
[0052] 若判断获知所述内存区域内不存在数据,则通过原子同步方法创建共享内存区域。
[0053] 其中,所述原子同步方法为Linux系统中通过原子操作进行同步的方法。
[0054] 通过采用原子同步方法,能够方便创建共享内存区域。
[0055] 具体地,如图2所示,在操作系统内部启动本实施例提供的服务后,服务将自动启动,终端中的该服务根据不同的操作系统选择不同的工作模式,寻找配置的共享内存区域,如果存在数据则读取该数据块,然后通过解析数据块中的各个模块,得到进程队列的模块,并将当前进程的信息回写入模块内,即回写至共享内存区域中,进一步地可执行服务进程的发现、通信和消息分发功能。如果后续有同步、通讯或分发请求,则继续执行对应的功能。如果区域不存在数据,则通过原子同步技术创建进程队列。
[0056] 具体应用时,可以使用本服务对应的Jar包,例如,在Java工程中,可以使用pom引入本服务的Jar包,或者将本服务的Jar包下载放置到运行时环境;然后阅读服务使用规范并编写调用方法,调用方法相关的调度名称、使用效果和调度说明如下表所示:
[0057]
[0058] 具体地,开发人员可以通过上述列表中的调用方法进行调度,以获取到当前机器上部署的所有使用该Jar包的服务,或获取到当前机器上部署的所有的当前服务,或通知当前机器上的所有当前服务,或修改共享块里面的共享数据,从而解决开发人员所面临的问题。本实施例通过共享内存实现跨Java进程之间的服务发现问题,同时实现Java进程之间的互相通讯,以及使用CPU同步机制实现进程之间的通讯互不干扰,解决了开发人员对于解决跨进程之间的通讯难题,规避多进程之间的抢占,实现轻量的数据共享,可以大大的节省研发人员的时间。
[0059] 需要说明的是,进程通讯和线程通讯是不同的:多个进程之间的通讯是通过CPU提供的CAS技术,包括无名/有名/高级管道通讯、消息队列、信号量、信号和Socket技术;而线程之间的通讯主要是通过线程的物理内存,需要注意同步问题,而通过共享内存进行通讯需要注意的是抢占问题。本实施例针对的操作系统为非实时操作系统,依赖于内核调度,每个CPU的内核都可以运行多个进程,但是依赖于操作系统调度。
[0060] 举例来说,当A进程发起对M内存区域进行定的操作,CPU的CAS技术就会使得其它的CPU内核得知M内存区域被锁定,便会等待下一个时钟周期(纳秒级别)再去访问,然后通过对当前内核持有的进程数据对共享内存中的数据进行比较,从而解决共享内存的抢占问题。
[0061] 图3示出了本实施例提供的一种基于共享内存的跨进程通信装置的结构示意图,所述装置包括:区域确定模块301、区域创建模块302、数据添加模块303和进程通信模块304,其中:
[0062] 所述区域确定模块301用于根据操作系统的类型确定工作模式,并根据所述工作模式确定进程通信的内存区域;
[0063] 所述区域创建模块302用于若判断获知所述内存区域内不存在数据,则创建共享内存区域;
[0064] 所述数据添加模块303用于若判断获知所述内存区域内已经存在数据,则将所述数据添加至所述共享内存区域;
[0065] 所述进程通信模块304用于通过所述共享内存区域实现各进程的通信,以规避多进程之间的抢占。
[0066] 具体地,所述区域确定模块301根据操作系统的类型确定工作模式,并根据所述工作模式确定进程通信的内存区域;所述区域创建模块302若判断获知所述内存区域内不存在数据,则创建共享内存区域;所述数据添加模块303若判断获知所述内存区域内已经存在数据,则将所述数据添加至所述共享内存区域;所述进程通信模块304通过所述共享内存区域实现各进程的通信。
[0067] 本实施例通过创建共享内存区域来存储数据,并通过共享内存区域实现各进程的通信,能够提高各进程之间的通信效率,实现轻量的数据共享,大大节省研发人员的研发时间。
[0068] 进一步地,在上述装置实施例的基础上,所述进程通信模块304具体用于通过所述共享内存区域实现各进程的消息分发、数据传输及同步。
[0069] 进一步地,在上述装置实施例的基础上,所述进程通信模块304具体用于通过所述共享内存区域获知当前终端中的进程数量。
[0070] 进一步地,在上述装置实施例的基础上,所述区域创建模块302具体用于若判断获知所述内存区域内不存在数据,则通过原子同步方法创建共享内存区域。
[0071] 本实施例所述的基于共享内存的跨进程通信装置可以用于执行上述方法实施例,其原理和技术效果类似,此处不再赘述。
[0072] 参照图4,所述电子设备,包括:处理器(processor)401、存储器(memory)402和总线403;
[0073] 其中,
[0074] 所述处理器401和存储器402通过所述总线403完成相互间的通信;
[0075] 所述处理器401用于调用所述存储器402中的程序指令,以执行上述各方法实施例所提供的方法。
[0076] 本实施例公开一种计算机程序产品,所述计算机程序产品包括存储在非暂态计算机可读存储介质上的计算机程序,所述计算机程序包括程序指令,当所述程序指令被计算机执行时,计算机能够执行上述各方法实施例所提供的方法。
[0077] 本实施例提供一种非暂态计算机可读存储介质,所述非暂态计算机可读存储介质存储计算机指令,所述计算机指令使所述计算机执行上述各方法实施例所提供的方法。
[0078] 以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。本领域普通技术人员在不付出创造性的劳动的情况下,即可以理解并实施。
[0079] 通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到各实施方式可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件。基于这样的理解,上述技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在计算机可读存储介质中,如ROM/RAM、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行各个实施例或者实施例的某些部分所述的方法。
[0080] 应说明的是:以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。
高效检索全球专利

专利汇是专利免费检索,专利查询,专利分析-国家发明专利查询检索分析平台,是提供专利分析,专利查询,专利检索等数据服务功能的知识产权数据服务商。

我们的产品包含105个国家的1.26亿组数据,免费查、免费专利分析。

申请试用

分析报告

专利汇分析报告产品可以对行业情报数据进行梳理分析,涉及维度包括行业专利基本状况分析、地域分析、技术分析、发明人分析、申请人分析、专利权人分析、失效分析、核心专利分析、法律分析、研发重点分析、企业专利处境分析、技术处境分析、专利寿命分析、企业定位分析、引证分析等超过60个分析角度,系统通过AI智能系统对图表进行解读,只需1分钟,一键生成行业专利分析报告。

申请试用

QQ群二维码
意见反馈