CN110046047A - 一种进程间通信方法、装置及计算机可读存储介质 - Google Patents
一种进程间通信方法、装置及计算机可读存储介质 Download PDFInfo
- Publication number
- CN110046047A CN110046047A CN201910300359.3A CN201910300359A CN110046047A CN 110046047 A CN110046047 A CN 110046047A CN 201910300359 A CN201910300359 A CN 201910300359A CN 110046047 A CN110046047 A CN 110046047A
- Authority
- CN
- China
- Prior art keywords
- data
- buffer area
- write
- client process
- read
- 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
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/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5005—Allocation of resources, e.g. of the central processing unit [CPU] to service a request
- G06F9/5027—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals
- G06F9/505—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals considering the load
-
- 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
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Computer And Data Communications (AREA)
Abstract
根据本申请提供的进程间通信方法、装置及计算机可读存储介质,控制write_Client进程以及read_Client进程向ServiceManager获取Server进程所申请的缓冲区;在write_Client进程开始数据写操作时,通过write_Client进程将数据源所提供的数据写入至缓冲区;在read_Client进程开始数据读操作时,通过read_Client进程从缓冲区读取数据至数据目的地。通过本申请方案的实施,由服务端负责管理缓冲区,而由读客户端和写客户端分别获取服务端申请的缓冲区,负责缓冲区的读写操作,可良好扩展于数据经常交换的场景,有效降低了进程负载,改善了数据交换的延时。
Description
技术领域
本申请涉及电子技术领域,尤其涉及一种进程间通信方法、装置及计算机可读存储介质。
背景技术
进程间通信(IPC,InterProcess Communication)是指两个任意进程之间的通信,由于部分程序在运行时,因为设计的需要必须被设计成多进程程序,从而需要通过进程间通信来在不同进程之间传播或交换信息。
目前,进程间通信的客户端Client与服务端Server之间进行消息请求和应答,提供服务的Server主线程需要一直循环检测是否有消息从Client发送过来,若有消息发送过来,则处理该消息,所以若在Server端再增加一线程来写数据,会造成Server进程不堪重负;另外,Client和Server之间的通信是即时通信,即Client向Server发送读请求,Server处理该请求而写数据,但如果此时此刻没有数据,则Server返回空,即没有数据返回,在Client循环读数据为空的概率比较高时,Client和Server进程负载较大。由此可见,目前在进行进程间通信时,会存在进程间数据读写速度不匹配的问题,在数据经常交换的场景下进程负载较大,数据交换产生的延时较高。
发明内容
本申请实施例提供一种进程间通信方法、装置及计算机可读存储介质,至少能够解决相关技术中在进行进程间通信时,进程间数据读写速度不匹配,所导致的在数据经常交换的场景下进程负载较大,延时较高的问题。
为解决上述问题,本申请实施例第一方面提供一种进程间通信方法,应用于包括写客户端、读客户端、服务端、服务管理者以及缓冲区的进程间通信系统,包括:
控制写客户端进程以及读客户端进程均向服务管理者获取服务端进程所申请的缓冲区;
在所述写客户端进程开始数据写操作时,通过所述写客户端进程将数据源所提供的数据写入至所述缓冲区;
在所述读客户端进程开始数据读操作时,通过所述读客户端进程从所述缓冲区读取数据至数据目的地。
本申请实施例第二方面提供一种进程间通信装置,应用于包括写客户端、读客户端、服务端、服务管理者以及缓冲区的进程间通信系统,包括:
控制模块,用于控制写客户端进程以及读客户端进程均向服务管理者获取服务端进程所申请的缓冲区;
写入模块,用于在所述写客户端进程开始数据写操作时,通过所述写客户端进程将数据源所提供的数据写入至所述缓冲区;
读取模块,用于在所述读客户端进程开始数据读操作时,通过所述读客户端进程从所述缓冲区读取数据至数据目的地。
本申请实施例第三方面提供一种电子装置,包括:存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,处理器执行计算机程序时,实现上述本申请实施例第一方面提供的进程间通信方法中的各步骤。
本申请实施例第四方面提供一种计算机可读存储介质,其上存储有计算机程序,计算机程序被处理器执行时,实现上述本申请实施例第一方面提供的进程间通信方法中的各步骤。
由上可见,根据本申请方案所提供的进程间通信方法、装置及计算机可读存储介质,控制写客户端write_Client进程以及读客户端read_Client进程均向服务管理者ServiceManager获取服务端Server进程所申请的缓冲区;在write_Client进程开始数据写操作时,通过write_Client进程将数据源所提供的数据写入至缓冲区;在read_Client进程开始数据读操作时,通过read_Client进程从缓冲区读取数据至数据目的地。通过本申请方案的实施,由Server负责管理缓冲区,而由read_Client和write_Client分别获取Service申请的缓冲区,负责缓冲区的读写操作,可良好扩展于数据经常交换的场景,有效降低了进程负载,改善了数据交换的延时。
附图说明
图1为本申请第一实施例提供的进程间通信方法的基本流程示意图;
图2为本申请第一实施例提供的环形缓冲区的示意图;
图3为本申请第二实施例提供的进程间通信方法的细化流程示意图;
图4为本申请第三实施例提供的进程间通信装置的程序模块示意图;
图5为本申请第四实施例提供的电子装置的结构示意图。
具体实施方式
为使得本申请的发明目的、特征、优点能够更加的明显和易懂,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分实施例,而非全部实施例。基于本申请中的实施例,本领域技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
为了解决相关技术中在进行进程间通信时,进程间数据读写速度不匹配,所导致的在数据经常交换的场景下进程负载较大,延时较高的缺陷,本发明第一实施例提供了一种进程间通信方法,应用于包括write_Client、read_Client、Server、ServiceManager以及缓冲区的进程间通信系统,如图1为本实施例提供的进程间通信方法的基本流程图,该进程间通信方法包括以下的步骤:
步骤101、控制write_Client进程以及read_Client进程均向ServiceManager获取Server进程所申请的缓冲区。
具体的,Service Manager是一个守护进程,用来管理Server,并向Client提供查询Server接口的能力。Server通过add_service向ServiceManager注册服务,而Client通过get_service传递要获取的服务名称至ServiceManager来获取Server服务。本实施例的框架中的Client包括获取数据的客户端read_Client、存放缓冲区数据的客户端write_Client,从而read_Client和write_Client分别获取Service所申请的缓冲区,负责缓冲区的读写操作,并且Server仅负责管理缓冲区,例如初始化和销毁该缓冲区。应当说明的是,在read_Client和write_Client获取到Server服务之后,write_Client通过write_init初始化缓冲区写操作,以及read_Client通过read_init初始化缓冲区读操作,也即获取缓冲区基地址,方便之后通过读写指针进行读写数据。
可选的,进程间通信系统为基于Binder机制的进程间通信系统,缓冲区为共享内存;共享内存被分别映射至write_Client、read_Client以及Server的进程地址空间。
具体的,在实际应用中,Linux上的进程间通信机制包括管道、消息队列、共享内存、信号量、Socket、Binder等。作为本实施例的一种优选实施方式,IPC系统为基于Binder机制的IPC系统,Binder机制通过Binder驱动在内核空间拷贝数据,且对每个进程进行有效检测保证安全。其中,本实施例的缓冲区是基于Binder机制的共享内存实现,与Binder通信机制耦合较多。共享内存就是映射一段能被其他进程所访问的内存,这段共享内存由一个进程创建,但多个进程都可以访问。共享内存是最快的IPC方式,它是针对其他进程间通信机制运行效率低而专门设计的。此外,还应当说明的是,该共享内存可以采用匿名共享内存(Ashmem,Anonymous Shared Memory)。
可选的,控制write_Client进程以及read_Client进程均向ServiceManager获取Server进程所申请的缓冲区之前,还包括:进行缓冲区初始化操作,将缓冲区中的数据清空,并初始化缓冲区的描述信息结构体。
具体的,本实施例中在进行数据读写通信之前,对缓冲区进行初始化,然后Server进程循环等待read_Client和write_Client的请求。也即将缓冲区中数据清空,并初始化缓冲区描述信息结构体buffer_struct,其中,buffer_struct包含缓冲区长度capacity、读指针read_ptr、写指针write_ptr、buffer头指针buffer_head_ptr,将缓冲区长度初始化为0,并将读写指针重置为缓冲区头部,而在缓冲区为环形缓冲区时,buffer_struct还包括互斥锁mutex,初始化时还将互斥锁初始化为未申请状态。
步骤102、在write_Client进程开始数据写操作时,通过write_Client进程将数据源所提供的数据写入至缓冲区。
步骤103、在read_Client进程开始数据读操作时,通过read_Client进程从缓冲区读取数据至数据目的地。
具体的,本实施例中在进行进程间通信时涉及三个进程,Server进程并不做数据的写,只是管理该共享内存缓冲区,而由Write_client将数据写入到缓冲区供read_client读取,write_Client客户端进程获取到该缓冲区后,对缓冲区进行写操作,read_Client客户端进程获取到该缓冲区后,对缓冲区进行读操作,从而节省了Server进程的性能开销。
可选的,缓冲区为环形缓冲区,在write_Client进程开始数据写操作时,判断数据源所提供的数据的长度是否大于环形缓冲区后端的连续可写区域的长度;若是,则将数据源所提供的数据截断为第一数据和第二数据,通过write_Client进程将第一数据写入环形缓冲区后端的连续可写区域,并将第二数据在环形缓冲区头部的预设连续可写区域进行写入;若否,则通过write_Client进程直接将数据源所提供的数据在环形缓冲区后端的连续可写区域进行写入;在read_Client进程开始数据读操作时,判断所需读取至数据目的地的数据的长度是否大于环形缓冲区后端的连续可读区域的长度;若是,则通过read_Client进程从连续可读区域读取第三数据,以及从环形缓冲区头部的预设连续可读区域读取第四数据至数据目的地,所需读取至数据目的地的数据分为第三数据和第四数据;若否,则通过read_Client进程直接从环形缓冲区后端的连续可读区域读取所需读取至数据目的地的数据至数据目的地。
具体的,如图2所示为本实施例提供的环形缓冲区的示意图,图中1标识当前缓冲区块已填充,buffer_head_ptr指向存放数据的内存起始位置,即环形缓冲区起始位置。read_ptr指向环形缓冲区中可读的位置,write_ptr指向环形缓冲区中可写的位置。通过移动读写指针实现缓冲区的数据读取和写入。一般情况下,环形缓冲区的读用户仅仅会影响读指针,而写用户仅仅会影响写指针。应当说明的是,在本实施例中,write_Client进程开始缓冲区写操作,从数据源data_source拷贝数据至环形缓冲区,如果当前拷贝数据长度大于缓冲区后端连续的剩余长度,则需要分两段写入,截断将部分数据拷贝至环形缓冲区的头部,最后更新buffer_struct描述信息中的写指针位置;而在read_Client进程开始缓冲区读操作时,从环形缓冲区拷贝write_Client进程写入的数据至数据目的地data_des,如果当前拷贝数据长度大于缓冲区后端连续的剩余长度,则需要分两段读取,截断将环形缓冲区的头部部分数据拷贝至data_des,最后更新buffer_struct描述信息中的读指针位置。
此外,可选的,缓冲区配置有互斥锁;通过write_Client进程将数据源所提供的数据写入至缓冲区之前,还包括:为write_Client进程申请互斥锁,将缓冲区进行写锁定;通过write_Client进程将数据源所提供的数据写入至缓冲区之后,还包括:将缓冲区的写锁定进行释放;通过read_Client进程从缓冲区读取数据至数据目的地之前,还包括:为read_Client进程申请互斥锁,将缓冲区进行读锁定;通过read_Client进程从缓冲区读取数据至数据目的地之后,还包括:将缓冲区的读锁定进行释放。
具体的,为保证缓冲区的互斥访问,本实施例中针对缓冲区设置有互斥锁,操作缓冲区前,都需要申请该锁,如果锁被其他进程已申请,即当前进程申请失败,则不操作缓冲区;若锁申请成功后,才允许操作缓冲区,操作结束后,释放该锁。
可选的,通过write_Client进程将数据源所提供的数据写入至缓冲区之前,还包括:将当前的write_Client进程休眠预设时长;和/或,通过read_Client进程从缓冲区读取数据至数据目的地之前,还包括:将当前的read_Client进程休眠预设时长。
具体的,在本实施例中,write_Client和read_Client进程循环进行缓冲区写和读操作,可在读写缓冲区前加适当延时,保证读写进程的负载。在实际应用中,可使用Linuxpthread库提供的sleep方法将当前线程休眠几秒钟,来达到延时的效果。
可选的,还包括:在缓冲区的所有数据读写操作完毕时,进行缓冲区释放操作,将缓冲区进行清空,并将缓冲区所占内存空间进行删除。
具体的,释放缓冲区,也即先将缓冲区清空,然后将缓冲区所占空间删除。作用是释放不必要的空间,防止内存空间的浪费,也避免内存泄漏的可能。
基于上述本申请实施例的技术方案,控制write_Client进程以及read_Client进程均向ServiceManager获取Server进程所申请的缓冲区;在write_Client进程开始数据写操作时,通过write_Client进程将数据源所提供的数据写入至缓冲区;在read_Client进程开始数据读操作时,通过read_Client进程从缓冲区读取数据至数据目的地。通过本申请方案的实施,由Server负责管理缓冲区,而由read_Client和write_Client分别获取Service申请的缓冲区,负责缓冲区的读写操作,可良好扩展于数据经常交换的场景,有效降低了进程负载,改善了数据交换的延时。
图3中的方法为本发明第二实施例提供的一种细化的进程间通信方法,该进程间通信方法包括:
步骤301、在Server进程向ServiceManager申请环形缓冲区后,对环形缓冲区进行初始化操作。
在本实施例中,对缓冲区进行初始化操作,将缓冲区中的数据清空,并初始化缓冲区的描述信息结构体,然后Server进程循环等待read_Client和write_Client的请求。
步骤302、控制write_Client进程以及read_Client进程均向ServiceManager获取Server进程所申请的环形缓冲区,并分别初始化缓冲区写操作和读操作。
具体的,在客户端获取到Server服务之后,通过初始化缓冲区写操作和读操作获取缓冲区基地址,方便之后客户端通过读写指针进行读写数据。
步骤303、在write_Client进程开始数据写操作时,为write_Client进程申请互斥锁,将环形缓冲区进行写锁定。
步骤304、通过write_Client进程将数据源所提供的数据写入至环形缓冲区,然后更新环形缓冲区描述信息结构体中的写指针且释放互斥锁。
步骤305、在read_Client进程开始数据读操作时,为read_Client进程申请互斥锁,将环形缓冲区进行读锁定。
步骤306、通过read_Client进程从缓冲区读取所写入的数据至数据目的地,然后更新环形缓冲区描述信息结构体中的读指针且释放互斥锁。
在本实施例中,为保证缓冲区的互斥访问,本实施例中针对缓冲区设置有互斥锁,操作缓冲区前,都需要申请该锁,若锁申请成功后,才允许操作缓冲区,操作结束后,释放该锁。
应当说明的是,在本实施例中,write_Client进程开始缓冲区写操作,从数据源data_source拷贝数据至环形缓冲区,如果当前拷贝数据长度大于缓冲区后端连续的剩余长度,则需要分两段写入,截断将部分数据拷贝至环形缓冲区的头部,最后更新buffer_struct描述信息中的写指针位置;而在read_Client进程开始缓冲区读操作时,从环形缓冲区拷贝write_Client进程写入的数据至数据目的地data_des,如果当前拷贝数据长度大于缓冲区后端连续的剩余长度,则需要分两段读取,截断将环形缓冲区的头部部分数据拷贝至data_des,最后更新buffer_struct描述信息中的读指针位置。
步骤307、在write_Client进程和read_Client进程循环进行对环形缓冲区的写操作和读操作结束时,对环形缓冲区进行释放操作。
本申请实施例公开了一种进程间通信方法,控制write_Client进程以及read_Client进程均向ServiceManager获取Server进程所申请的缓冲区;在write_Client进程开始数据写操作时,通过write_Client进程将数据源所提供的数据写入至缓冲区;在read_Client进程开始数据读操作时,通过read_Client进程从缓冲区读取数据至数据目的地。通过本申请方案的实施,由Server负责管理缓冲区,而由read_Client和write_Client分别获取Service申请的缓冲区,负责缓冲区的读写操作,可良好扩展于数据经常交换的场景,有效降低了进程负载,改善了数据交换的延时。
图4为本发明第三实施例提供的一种进程间通信装置,应用于包括write_Client、read_Client、Server、ServiceManager以及缓冲区的进程间通信系统。该进程间通信装置可用于实现图1或图2所示实施例中的进程间通信方法。如图4所示,该进程间通信装置主要包括:
控制模块401,用于控制write_Client进程以及read_Client进程均向ServiceManager获取Server进程所申请的缓冲区;
写入模块402,用于在write_Client进程开始数据写操作时,通过write_Client进程将数据源所提供的数据写入至缓冲区;
读取模块403,用于在read_Client进程开始数据读操作时,通过read_Client进程从缓冲区读取数据至数据目的地。
在本实施例一种可选的实施方式中,进程间通信系统为基于Binder机制的进程间通信系统,缓冲区为共享内存;共享内存被分别映射至write_Client、read_Client以及Server的进程地址空间。
在本实施例一种可选的实施方式中,缓冲区为环形缓冲区;写入模块402具体用于在write_Client进程开始数据写操作时,判断数据源所提供的数据的长度是否大于环形缓冲区后端的连续可写区域的长度;若是,则将数据源所提供的数据截断为第一数据和第二数据,通过write_Client进程将第一数据写入环形缓冲区后端的连续可写区域,并将第二数据在环形缓冲区头部的预设连续可写区域进行写入;若否,则通过write_Client进程直接将数据源所提供的数据在环形缓冲区后端的连续可写区域进行写入;读取模块403具体用于在read_Client进程开始数据读操作时,判断所需读取至数据目的地的数据的长度是否大于环形缓冲区后端的连续可读区域的长度;若是,则通过read_Client进程从连续可读区域读取第三数据,以及从环形缓冲区头部的预设连续可读区域读取第四数据至数据目的地,所需读取至数据目的地的数据包括第三数据和第四数据,;若否,则通过read_Client进程直接从环形缓冲区后端的连续可读区域读取所需读取至数据目的地的数据至数据目的地。
在本实施例一种可选的实施方式中,缓冲区配置有互斥锁;进程间通信装置还包括:锁定模块,用于在通过write_Client进程将数据源所提供的数据写入至缓冲区之前,为write_Client进程申请互斥锁,将缓冲区进行写锁定,并在通过write_Client进程将数据源所提供的数据写入至缓冲区之后,将缓冲区的写锁定进行释放;以及在通过read_Client进程从缓冲区读取数据至数据目的地之前,为read_Client进程申请互斥锁,将缓冲区进行读锁定,并在通过read_Client进程从缓冲区读取数据至数据目的地之后,将缓冲区的读锁定进行释放。
在本实施例一种可选的实施方式中,进程间通信装置还包括:延时模块,用于在通过write_Client进程将数据源所提供的数据写入至缓冲区之前,将当前的write_Client进程休眠预设时长;和/或,在通过read_Client进程从缓冲区读取数据至数据目的地之前,将当前的read_Client进程休眠预设时长。
进一步地,在本实施例一种可选的实施方式中,进程间通信装置还包括:初始化模块,用于在控制write_Client进程以及read_Client进程均向ServiceManager获取Server进程所申请的缓冲区之前,进行缓冲区初始化操作,将缓冲区中的数据清空,并初始化缓冲区的描述信息结构体。
进一步地,在本实施例一种可选的实施方式中,进程间通信装置还包括:释放模块,用于在缓冲区的所有数据读写操作完毕时,进行缓冲区释放操作,将缓冲区进行清空,并将缓冲区所占内存空间进行删除。
应当说明的是,第一、二实施例中的进程间通信方法均可基于本实施例提供的进程间通信装置实现,所属领域的普通技术人员可以清楚的了解到,为描述的方便和简洁,本实施例中所描述的进程间通信装置的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
本实施例所提供的进程间通信装置,包括:控制模块,用于控制write_Client进程以及read_Client进程均向ServiceManager获取Server进程所申请的缓冲区;写入模块,用于在write_Client进程开始数据写操作时,通过write_Client进程将数据源所提供的数据写入至缓冲区;读取模块,用于在read_Client进程开始数据读操作时,通过read_Client进程从缓冲区读取数据至数据目的地。通过本申请方案的实施,由Server负责管理缓冲区,而由read_Client和write_Client分别获取Service申请的缓冲区,负责缓冲区的读写操作,可良好扩展于数据经常交换的场景,有效降低了进程负载,改善了数据交换的延时。
请参阅图5,图5为本发明第四实施例提供的一种电子装置。该电子装置可用于实现图1和图2所示实施例中的进程间通信方法。如图5所示,该电子装置主要包括:
存储器501、处理器502、总线503及存储在存储器501上并可在处理器502上运行的计算机程序,存储器501和处理器502通过总线503连接。处理器502执行该计算机程序时,实现图1或图2所示实施例中的进程间通信方法。其中,处理器的数量可以是一个或多个。
存储器501可以是高速随机存取记忆体(RAM,Random Access Memory)存储器,也可为非不稳定的存储器(non-volatile memory),例如磁盘存储器。存储器501用于存储可执行程序代码,处理器502与存储器501耦合。
进一步的,本申请实施例还提供了一种计算机可读存储介质,该计算机可读存储介质可以是设置于上述各实施例中的电子装置中,该计算机可读存储介质可以是前述图5所示实施例中的存储器。
该计算机可读存储介质上存储有计算机程序,该程序被处理器执行时实现图1或图2所示实施例中的进程间通信方法。进一步的,该计算机可存储介质还可以是U盘、移动硬盘、只读存储器(ROM,Read-Only Memory)、RAM、磁碟或者光盘等各种可以存储程序代码的介质。
在本申请所提供的几个实施例中,应该理解到,所揭露的装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,模块的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个模块或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或模块的间接耦合或通信连接,可以是电性,机械或其它的形式。
作为分离部件说明的模块可以是或者也可以不是物理上分开的,作为模块显示的部件可以是或者也可以不是物理模块,即可以位于一个地方,或者也可以分布到多个网络模块上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。
另外,在本申请各个实施例中的各功能模块可以集成在一个处理模块中,也可以是各个模块单独物理存在,也可以两个或两个以上模块集成在一个模块中。上述集成的模块既可以采用硬件的形式实现,也可以采用软件功能模块的形式实现。
集成的模块如果以软件功能模块的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个可读存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本申请各个实施例方法的全部或部分步骤。而前述的可读存储介质包括:U盘、移动硬盘、ROM、RAM、磁碟或者光盘等各种可以存储程序代码的介质。
需要说明的是,对于前述的各方法实施例,为了简便描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本申请并不受所描述的动作顺序的限制,因为依据本申请,某些步骤可以采用其它顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于优选实施例,所涉及的动作和模块并不一定都是本申请所必须的。
在上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述的部分,可以参见其它实施例的相关描述。
以上为对本申请所提供的进程间通信方法、电子装置及计算机可读存储介质的描述,对于本领域的技术人员,依据本申请实施例的思想,在具体实施方式及应用范围上均会有改变之处,综上,本说明书内容不应理解为对本申请的限制。
Claims (10)
1.一种进程间通信方法,应用于包括写客户端、读客户端、服务端、服务管理者以及缓冲区的进程间通信系统,其特征在于,包括:
控制写客户端进程以及读客户端进程均向服务管理者获取服务端进程所申请的缓冲区;
在所述写客户端进程开始数据写操作时,通过所述写客户端进程将数据源所提供的数据写入至所述缓冲区;
在所述读客户端进程开始数据读操作时,通过所述读客户端进程从所述缓冲区读取数据至数据目的地。
2.根据权利要求1所述的进程间通信方法,其特征在于,所述进程间通信系统为基于Binder机制的进程间通信系统,所述缓冲区为共享内存;所述共享内存被分别映射至所述写客户端、读客户端以及服务端的进程地址空间。
3.根据权利要求1所述的进程间通信方法,其特征在于,所述缓冲区为环形缓冲区;
所述在所述写客户端进程开始数据写操作时,通过所述写客户端进程将数据源所提供的数据写入至所述缓冲区包括:
在所述写客户端进程开始数据写操作时,判断数据源所提供的数据的长度是否大于所述环形缓冲区后端的连续可写区域的长度;
若是,则将所述数据源所提供的数据截断为第一数据和第二数据,通过所述写客户端进程将所述第一数据写入所述环形缓冲区后端的连续可写区域,并将所述第二数据在所述环形缓冲区头部的预设连续可写区域进行写入;
若否,则通过所述写客户端进程直接将所述数据源所提供的数据在所述环形缓冲区后端的连续可写区域进行写入;
所述在所述读客户端进程开始数据读操作时,通过所述读客户端进程从所述缓冲区读取数据至数据目的地包括:
在所述读客户端进程开始数据读操作时,判断所需读取至数据目的地的数据的长度是否大于所述环形缓冲区后端的连续可读区域的长度;
若是,则通过所述读客户端进程从所述连续可读区域读取第三数据,以及从所述环形缓冲区头部的预设连续可读区域读取第四数据至数据目的地;所述所需读取至数据目的地的数据包括第三数据和第四数据;
若否,则通过所述读客户端进程直接从所述环形缓冲区后端的连续可读区域读取所述所需读取至数据目的地的数据至所述数据目的地。
4.根据权利要求1所述的进程间通信方法,其特征在于,所述缓冲区配置有互斥锁;
所述通过所述写客户端进程将数据源所提供的数据写入至所述缓冲区之前,还包括:
为所述写客户端进程申请所述互斥锁,将所述缓冲区进行写锁定;
所述通过所述写客户端进程将数据源所提供的数据写入至所述缓冲区之后,还包括:
将所述缓冲区的写锁定进行释放;
所述通过所述读客户端进程从所述缓冲区读取数据至数据目的地之前,还包括:
为所述读客户端进程申请所述互斥锁,将所述缓冲区进行读锁定;
所述通过所述读客户端进程从所述缓冲区读取数据至数据目的地之后,还包括:
将所述缓冲区的读锁定进行释放。
5.根据权利要求1所述的进程间通信方法,其特征在于,所述通过所述写客户端进程将数据源所提供的数据写入至所述缓冲区之前,还包括:
将当前的所述写客户端进程休眠预设时长;
和/或,所述通过所述读客户端进程从所述缓冲区读取数据至数据目的地之前,还包括:
将当前的所述读客户端进程休眠预设时长。
6.根据权利要求1至5中任意一项所述的进程间通信方法,其特征在于,所述控制写客户端进程以及读客户端进程均向服务管理者获取服务端进程所申请的缓冲区之前,还包括:
进行缓冲区初始化操作,将所述缓冲区中的数据清空,并初始化所述缓冲区的描述信息结构体。
7.根据权利要求1至5中任意一项所述的进程间通信方法,其特征在于,还包括:
在所述缓冲区的所有数据读写操作完毕时,进行缓冲区释放操作,将所述缓冲区进行清空,并将所述缓冲区所占内存空间进行删除。
8.一种进程间通信装置,应用于包括写客户端、读客户端、服务端、服务管理者以及缓冲区的进程间通信系统,其特征在于,包括:
控制模块,用于控制写客户端进程以及读客户端进程均向服务管理者获取服务端进程所申请的缓冲区;
写入模块,用于在所述写客户端进程开始数据写操作时,通过所述写客户端进程将数据源所提供的数据写入至所述缓冲区;
读取模块,用于在所述读客户端进程开始数据读操作时,通过所述读客户端进程从所述缓冲区读取数据至数据目的地。
9.一种电子装置,包括:存储器、处理器及存储在所述存储器上并可在所述处理器上运行的计算机程序,其特征在于,所述处理器执行所述计算机程序时,实现权利要求1至7中任意一项所述方法中的步骤。
10.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,所述计算机程序被处理器执行时,实现权利要求1至7中的任意一项所述方法中的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910300359.3A CN110046047A (zh) | 2019-04-15 | 2019-04-15 | 一种进程间通信方法、装置及计算机可读存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910300359.3A CN110046047A (zh) | 2019-04-15 | 2019-04-15 | 一种进程间通信方法、装置及计算机可读存储介质 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN110046047A true CN110046047A (zh) | 2019-07-23 |
Family
ID=67277136
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910300359.3A Pending CN110046047A (zh) | 2019-04-15 | 2019-04-15 | 一种进程间通信方法、装置及计算机可读存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN110046047A (zh) |
Cited By (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112256460A (zh) * | 2020-11-24 | 2021-01-22 | 北京元心科技有限公司 | 进程间通信方法、装置、电子设备及计算机可读存储介质 |
WO2021120714A1 (zh) * | 2019-12-18 | 2021-06-24 | 成都海光微电子技术有限公司 | 数据交换方法、装置、处理器及计算机系统 |
CN114221818A (zh) * | 2021-12-21 | 2022-03-22 | 深圳铸泰科技有限公司 | 基于交换树上报五元组的方法、系统、终端及存储介质 |
CN115242898A (zh) * | 2022-06-06 | 2022-10-25 | 浪潮通信技术有限公司 | 协议栈与物理层进程间的通信方法及装置 |
CN115309547A (zh) * | 2022-07-31 | 2022-11-08 | 荣耀终端有限公司 | 处理异步binder调用的方法和装置 |
Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101060418A (zh) * | 2007-05-24 | 2007-10-24 | 上海清鹤数码科技有限公司 | 适用于带时移iptv直播服务器的专用磁盘读写系统 |
CN102103526A (zh) * | 2011-02-14 | 2011-06-22 | 博视联(苏州)信息科技有限公司 | 服务端和客户端间通过服务管理进行进程间通信的方法及系统 |
CN102622557A (zh) * | 2012-02-22 | 2012-08-01 | 清华大学 | x协议图形用户系统及将该系统写入内核态的方法 |
CN103257888A (zh) * | 2012-02-16 | 2013-08-21 | 阿里巴巴集团控股有限公司 | 一种对缓冲队列并发执行读、写访问的方法和设备 |
CN106293973A (zh) * | 2016-08-17 | 2017-01-04 | 深圳市金证科技股份有限公司 | 无锁消息队列通信方法及系统 |
US20170060741A1 (en) * | 2014-09-16 | 2017-03-02 | Salesforce.Com, Inc. | In-memory buffer service |
CN108491333A (zh) * | 2018-03-21 | 2018-09-04 | 广州多益网络股份有限公司 | 环形缓冲区的数据写入方法、装置、设备及介质 |
-
2019
- 2019-04-15 CN CN201910300359.3A patent/CN110046047A/zh active Pending
Patent Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101060418A (zh) * | 2007-05-24 | 2007-10-24 | 上海清鹤数码科技有限公司 | 适用于带时移iptv直播服务器的专用磁盘读写系统 |
CN102103526A (zh) * | 2011-02-14 | 2011-06-22 | 博视联(苏州)信息科技有限公司 | 服务端和客户端间通过服务管理进行进程间通信的方法及系统 |
CN103257888A (zh) * | 2012-02-16 | 2013-08-21 | 阿里巴巴集团控股有限公司 | 一种对缓冲队列并发执行读、写访问的方法和设备 |
CN102622557A (zh) * | 2012-02-22 | 2012-08-01 | 清华大学 | x协议图形用户系统及将该系统写入内核态的方法 |
US20170060741A1 (en) * | 2014-09-16 | 2017-03-02 | Salesforce.Com, Inc. | In-memory buffer service |
CN106293973A (zh) * | 2016-08-17 | 2017-01-04 | 深圳市金证科技股份有限公司 | 无锁消息队列通信方法及系统 |
CN108491333A (zh) * | 2018-03-21 | 2018-09-04 | 广州多益网络股份有限公司 | 环形缓冲区的数据写入方法、装置、设备及介质 |
Cited By (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2021120714A1 (zh) * | 2019-12-18 | 2021-06-24 | 成都海光微电子技术有限公司 | 数据交换方法、装置、处理器及计算机系统 |
CN112256460A (zh) * | 2020-11-24 | 2021-01-22 | 北京元心科技有限公司 | 进程间通信方法、装置、电子设备及计算机可读存储介质 |
CN114221818A (zh) * | 2021-12-21 | 2022-03-22 | 深圳铸泰科技有限公司 | 基于交换树上报五元组的方法、系统、终端及存储介质 |
CN115242898A (zh) * | 2022-06-06 | 2022-10-25 | 浪潮通信技术有限公司 | 协议栈与物理层进程间的通信方法及装置 |
CN115242898B (zh) * | 2022-06-06 | 2024-04-19 | 浪潮通信技术有限公司 | 协议栈与物理层进程间的通信方法及装置 |
CN115309547A (zh) * | 2022-07-31 | 2022-11-08 | 荣耀终端有限公司 | 处理异步binder调用的方法和装置 |
CN115309547B (zh) * | 2022-07-31 | 2023-08-29 | 荣耀终端有限公司 | 处理异步binder调用的方法和装置 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN110046047A (zh) | 一种进程间通信方法、装置及计算机可读存储介质 | |
US9244839B2 (en) | Methods and apparatus for supporting persistent memory | |
US7363629B2 (en) | Method, system, and program for remote resource management | |
US9753754B2 (en) | Enforcing deterministic execution of threads of guest operating systems running in a virtual machine hosted on a multiprocessor machine | |
US20160283421A1 (en) | Virtual machine state replication using dma write records | |
US9959074B1 (en) | Asynchronous in-memory data backup system | |
US7383290B2 (en) | Transaction processing systems and methods utilizing non-disk persistent memory | |
EP1674992A1 (en) | Replicated virtual machine | |
US8671225B2 (en) | Method and apparatus for supporting universal serial bus devices in a virtualized environment | |
JP2004185349A (ja) | ジャーナルログを利用した更新データ書込方法 | |
US11151686B2 (en) | GPU based server in a distributed file system | |
US9037669B2 (en) | Remote processing and memory utilization | |
US20150081986A1 (en) | Modifying non-transactional resources using a transactional memory system | |
CN109189577A (zh) | 一种数据同步时防止内存溢出的方法和装置 | |
US10289306B1 (en) | Data storage system with core-affined thread processing of data movement requests | |
US10152450B2 (en) | Remote processing and memory utilization | |
US11263122B2 (en) | Implementing fine grain data coherency of a shared memory region | |
CN112306652A (zh) | 带有上下文提示的功能的唤醒和调度 | |
CN114827048A (zh) | 一种动态可配高性能队列调度方法、系统、处理器及协议 | |
US20130173880A1 (en) | Dedicated large page memory pools | |
Eberhard et al. | Efficient object caching for distributed Java RMI applications | |
US9135043B1 (en) | Interface for enabling an application in a virtual machine to access high performance devices | |
CN111258684A (zh) | 一种控制方法和装置 | |
CN101266541A (zh) | iSCSI目标器与存储设备的接口方法 | |
US11836356B2 (en) | Snapshots with smart network interface controller |
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 | ||
RJ01 | Rejection of invention patent application after publication | ||
RJ01 | Rejection of invention patent application after publication |
Application publication date: 20190723 |