CN115904745A - 进程间通信方法及相关设备 - Google Patents
进程间通信方法及相关设备 Download PDFInfo
- Publication number
- CN115904745A CN115904745A CN202210674721.5A CN202210674721A CN115904745A CN 115904745 A CN115904745 A CN 115904745A CN 202210674721 A CN202210674721 A CN 202210674721A CN 115904745 A CN115904745 A CN 115904745A
- Authority
- CN
- China
- Prior art keywords
- thread
- request
- response data
- response
- data
- 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
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Landscapes
- Debugging And Monitoring (AREA)
Abstract
本申请提供一种进程间通信方法及相关设备,所述方法包括:接收所述客户端发来的第一进程的请求;获取所述请求对应的对象锁以及所述请求对应的第二进程;根据所述对象锁通过所述第二进程同步响应所述请求,得到响应数据;采用所述第二进程将所述响应数据发送到所述第一进程。本申请通过请求对应的对象锁实现进程间的请求响应,根据对象锁提供的同步功能,实现了客户端中的第一进程的实时响应,避免了客户端的第一进程通过异步的方式获取请求响应。并且,通过对象锁对第二进程响应请求过程中数据安全的支持,解决了第二进程多线程并发时的数据安全问题,提高了客户端中第一进程获取响应的实时性和安全性。
Description
技术领域
本申请涉及终端通信领域,特别是涉及一种进程间通信方法及相关设备。
背景技术
在包括客户端与服务端的安卓(英文名称为android,是一种基于Linux内核的自由及开放源代码的操作系统)系统中,客户端经常需要通过接口与服务端进行数据传输,并且该数据传输经常发生在不同进程间。但是,进程的用户空间是互相独立的,一般而言是不能互相访问的。安卓系统可以采用binder通信机制来实现进程间通信。
通常,进程间通信需要将客户端的进程挂起,并通过服务端中线程池中的线程进行异步调用,这就导致了客户端的进程不能实时接收服务端返回的数据。
发明内容
有鉴于此,本申请的目的在于提出一种进程间通信方法及相关设备,用以解决或部分解决上述技术问题。
基于上述目的,本申请的第一方面提供了一种进程间通信方法,包括:
接收客户端发来的第一进程的请求;
获取所述请求对应的对象锁以及所述请求对应的第二进程;
根据所述对象锁通过所述第二进程同步响应所述请求,得到响应数据;
采用所述第二进程将所述响应数据发送到所述第一进程。
本申请的第二方面提供了一种进程间通信装置,包括:
接收模块,被配置为接收客户端发来的第一进程的请求;
获取模块,被配置为获取所述请求对应的对象锁;
响应模块,被配置为根据所述对象锁通过第二进程同步响应所述请求,得到响应数据;
发送模块,被配置为采用所述第二进程将所述响应数据发送到所述第一进程。
本申请的第三方面提供了一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现第一方面所述的方法。
本申请的第四方面提供了一种非暂态计算机可读存储介质,所述非暂态计算机可读存储介质存储计算机指令,所述计算机指令用于使计算机执行第一方面所述方法。
本申请的第五方面提供了一种车辆,包括如第三方面所述的电子设备。
从上面所述可以看出,本申请提供的一种进程间通信方法及相关设备,通过请求对应的对象锁实现进程间的请求响应,根据对象锁提供的同步功能,实现了客户端中的第一进程的实时响应,避免了客户端的第一进程通过异步的方式获取请求响应。并且,通过对象锁对第二进程响应请求过程中数据安全的支持,解决了第二进程多线程并发时的数据安全问题,提高了客户端中第一进程获取响应的实时性和安全性。
附图说明
为了更清楚地说明本申请或相关技术中的技术方案,下面将对实施例或相关技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为一种进程间通信方法的示意图;
图2为本申请实施例的进程间通信方法的流程示意图;
图3为步骤103的步骤展开示意图;
图4为步骤104的步骤展开示意图;
图5为本申请实施例的进程间通信方法的整体框架示意图;
图6为本申请实施例的进程间通信装置的结构示意图;
图7为本申请实施例的电子设备的结构示意图。
具体实施方式
为了能够更清楚地理解本申请的上述目的、特征和优点,下面将对本申请的方案进行进一步描述。需要说明的是,在不冲突的情况下,本申请的实施例及实施例中的特征可以相互组合。
在下面的描述中阐述了很多具体细节以便于充分理解本申请,但本申请还可以采用其他不同于在此描述的方式来实施;显然,说明书中的实施例只是本申请的一部分实施例,而不是全部的实施例。
需要说明的是,在本文中,诸如“第一”和“第二”等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
如背景技术所述,进程间通信(IPC,Interprocess communication)指的是一组编程接口,让程序员能够协调不同的进程,使之能在一个操作系统里同时运行,并相互传递、交换信息。IPC的目的包括:(1)数据传输:一个进程需要将它的数据发送给另一个进程。(2)资源共享:多个进程之间共享同样的资源。(3)通知事件:一个进程需要向另一个或一组进程发送消息,通知它(它们)发生了某种事件(如进程终止时要通知父进程)。(4)进程控制:有些进程希望完全控制另一个进程的执行(如Debug进程),此时控制进程希望能够拦截另一个进程的所有陷入和异常,并能够及时知道它的状态改变。并且,IPC指的是让两个进程通信,但不需要让两个进程看到同一份资源。
具体的,安卓系统SDK(SoftwareDevelopmentKit,软件开发工具包)为IPC中提供了4种用于跨进程通讯的方式。这4种方式对应于安卓系统中4种应用程序组件:Activity(活动组件)、Content Provider(内容提供组件)、Broadcast(广播组件)和Service(服务组件)。其中Service可以访问其他应用程序中的数据,而且,Service可以直接返回Java对象。
但是,普通的Service并不能实现进程间通信,即,普通的Service和它所在的应用处于同一个进程中,而且它也不会专门开一条新的线程,因此如果在普通的Service中实现在耗时的任务,需要新开线程。
安卓系统要实现进程间通信,需要借助AIDL(Android Interface DefinitionLanguage)接口和binder(粘合)机制,binder中进程的数据拷贝只需要一次,相比于管道、消息队列、Socket(套接字)的2次数据拷贝,binder提高了进程间通信的效率;相比于共享内存方式不需要数据拷贝的进程间通信方式,基于binder机制的进程间通信的不包括内存空间的开辟,简化了进程间通信的实现方式。
Binder通信的步骤可以包括:
1、注册服务:Server进程向Binder机制发起注册服务请求,Binder机制将请求转发给ServiceManager(服务管理组件),ServiceManager添加该Server进程管理。
2、获取服务:Client(客户端)向Binder机制获取服务,Binder机制将请求转发到ServiceManager并查找Client对应的Server(服务端)服务信息,通过Binder驱动将上述信息返回
3、使用服务:Binder驱动创建一块接收缓存区域,并实现内存映射关系:包括内核缓存区和Server用户区映射到同一个接受缓存区。Client调用copy_from_user()方法发送到内核缓存区。内核缓存区映射到Server用户空间去,Server进行解包,执行指定方法。将执行结果存到接受区内存缓存区,内存映射到内核缓存区。Client调用copy_to_user()方法获取内核缓存区数据,完成本次通信。
具体的,如图1所示,client(客户端)进程通过binder(粘合)机制发起远程请求并且挂起,binder通过transact方法和ontransact方法调用server(服务端)进程中的线程池完成加锁对象数据的获取,通过binder机制唤醒client进程并将数据发送到client进程,完成进程间的通信过程。
但是,由于binder机制中服务端的进程对于客户端进程的响应是通过异步响应的方式完成的,影响了客户端进程请求响应的实时性。并且,由于binder机制需要对客户端进程和负责响应的服务端进程进行身份校验,通过AIDL接口实现对客户端进程的实时响应需要对服务端的整体业务逻辑进行安全提升,增加了服务端进程的开销。
由此可见,进程间需要一种同步响应并且兼顾安全性的通信方式。
鉴于此,本申请的实施例提供一种进程间通信方法,可以应用于由客户端和服务端组成的系统中不同进程之间的通信。
可以理解的是,本申请的实施例虽然以安卓系统为例说明,但是本申请的进程间通信方法可以在不同系统上应用,例如,包括Android(谷歌)、iOS(苹果)、windows phone(微软)、Symbian(诺基亚)、BlackBerry OS(黑莓)、web os、windows mobile(微软)、Harmony(鸿蒙)、卓易操作系统(Freeme OS)的手机系统以及包括windows和linux的计算机操作系统。
如图2所示,本实施例的方法包括:
步骤101,接收客户端发来的第一进程的请求。
在该步骤中,客户端指的是使用服务的进程所在的终端。本实施例优选的客户端可以是binder机制中的client进程所在的终端。其中,进程指的包括客户端的系统中的程序关于某数据集合上的一次运行活动,进程至少包括第一进程和第二进程。其中,客户端中设有第一进程。本实施例优选的第一进程可以是安卓系统中发起请求的进程。
具体的,系统会在同一时间做许多事,比如边看电影,边微信聊天,顺便打开浏览器搜索一下,系统所做的这么多事情背后都是一个个正在运行中的软件程序;这些程序想要运行起来,首先在磁盘上需要有各自的程序代码,然后将代码加载到内存中,CPU会去执行这些代码,运行中会产生很多数据需要存放,也可能需要和网卡、显卡、键盘等外部设备交互,这背后其实就涉及到程序对资源的使用,存在这么多程序,系统需要想办法管理程序资源的使用。并且CPU如果只有一个,那么还需要操作系统调度CPU分配给各个程序使用,让用户感觉这些程序在同时运行,不影响用户体验。理所当然,安卓系统会把每个运行中的程序封装成独立的实体,分配各自所需要的资源,再根据调度算法切换执行。这个抽象程序实体就是进程。进程是操作系统进行资源分配和调度的一个基本单位。
请求指的是进程发送给服务端的数据。本实施例优选的请求可以是第一进程发送的数据,其中,请求可以包括下列至少之一:要求指定的状态信息并要求返回具体内容的数据、向指定进程提交内容的数据、向指定进程提交取代内容的数据等,这里不做具体限定。例如,安卓系统中的语音进程发出获取导航状态的请求。这样,为后续对象锁和第二进程的获取提供请求基础。
步骤102,获取所述请求对应的对象锁以及所述请求对应的第二进程。
在该步骤中,对象锁指的是多线程环境中用于保证共享数据安全性的代码。本实施例优选的对象锁可以是客户端发送的请求对应的锁。其中,服务端中包括多个锁,服务端根据请求从上述多个锁中确定请求对应的对象锁。
具体的,对象锁是针对请求对应的一个对象,它只在该对象的某个内存位置声明一个标志位标识该对象是否拥有锁,所以它只会锁住当前的请求对应的对象。一般一个对象锁是对一个请求中的非静态成员变量进行syncronized(同步)修饰,或者对一个请求对应的非静态方法进行syncronized修饰。对于对象锁,请求对应的不同对象访问同一个被syncronized修饰的方法的时候不会阻塞住。系统中的每个对象都有一个锁,当请求访问某个对象的synchronized方法时,表示将该对象上锁,此时其他任何线程都无法在去访问该syncronized方法了,直到之前的那个线程执行方法完毕后,其他线程才有可能去访问该synchronized方法。如果请求对应的一个对象有多个synchronized方法,某一时刻某个线程已经进入到某个synchronzed方法,那么在该方法没有执行完毕前,其他线程无法访问该对象的任何synchronzied方法的,但可以访问非synchronzied方法。如果synchronized方法是static的,那么当请求对应的线程访问该方法时,它锁的并不是synchronized方法所在的对象,而是synchuronized方法所在对象的对应的Class对象,因为系统中请求对应的无论有多少个对象,这些对象会对应唯一一个Class对象,因此当线程分别访问同一个请求的两个对象的static,synchronized方法时,它们的执行也是按顺序来的,也就是说一个线程先执行,一个线程后执行。
具体的,服务端中的第二进程根据请求确定响应该请求的线程,服务端根据响应该请求的线程所访问的对象获取对象锁。
其中,线程指的是程序执行的最小单位。进程负责分配和管理系统资源,线程负责CPU调度运算。
具体的,随着系统的发展,程序的功能设计越来越复杂,程序中同时发生着多种活动,其中某些活动随着时间的推移会被阻塞,比如网络请求、读写文件(也就是IO操作),为了将程序分解成更细粒度、能准并行运行多个顺序执行实体,并且这些细粒度的执行实体可以共享进程的地址空间,也就是可以共享程序代码、数据、内存空间等,这样程序设计模型会变得更加简单。但是,每个进程都有独立的代码和数据空间(程序上下文),程序之间的切换会有较大的开销。
线程可以看做轻量级的进程,同一类线程共享代码和数据空间,每个线程都有自己独立的运行栈和程序计数器,线程之间切换的开销小。所以线程的创建、销毁、调度性能远远优于进程。
在引入多线程模型后,进程和线程在程序执行过程中的分工就相当明确了,进程负责分配和管理系统资源,线程负责CPU调度运算,也是CPU切换时间片的最小单位。对于任何一个进程来讲,即便没有主动去创建线程,进程也是默认有一个主线程的。
服务端指的是提供服务的进程所在的终端。本实施例优选的服务端可以是binder机制中的service进程所在的终端。其中,服务端中包括多个进程,服务端根据请求从上述多个进程中确定第二进程。
例如,安卓系统中的语音进程发出获取导航状态的请求,服务端根据该请求确定导航进程作为第二进程并获取该请求对应的对象锁。这样,为后续实现根据对象锁通过所述第二进程进行响应提供了响应基础。
步骤103,根据所述对象锁通过所述第二进程同步响应所述请求,得到响应数据。
在该步骤中,响应指的是进程为请求提供所需要数据的过程。本实施例中优选的响应可以是安卓系统中的进程为请求提供所需要数据的过程。例如,根据对象锁导航进程为请求提供所需要的导航状态数据,并且在响应过程中根据对象锁提供的同步功能和对数据安全的支持,实现了导航状态数据的同步获取和数据安全功能。
响应数据指的是服务端接收到请求后作出相应的处理后回复给客户端的数据。本实施例中优选的响应数据可以为下列至少之一:进程的状态数据、用于获取报头的数据等,这里不做具体限定。
例如,请求为获取服务端中的导航状态数据,根据导航状态数据对应的对象锁确认第二进程中的状态线程,再通过状态线程响应请求,得到导航状态数据作为响应数据。
这样,实时获取了客户端中第一进程所需要的请求数据,为后续响应数据的发送提供数据基础。
步骤104,采用所述第二进程将所述响应数据发送到所述第一进程。
在该步骤中,将通过对象锁和第二进程获取得到的响应数据发送到第一进程。例如,服务端中的第二进程将导航状态数据发送到客户端中的语音进程。这样,实现了客户端的第一进程中请求的同步响应和实时获取。
通过上述方案,通过请求对应的对象锁实现进程间的请求响应,根据对象锁提供的同步功能,实现了客户端中的第一进程的实时响应,避免了客户端的第一进程通过异步的方式获取请求响应。并且,通过对象锁对第二进程响应请求过程中数据安全的支持,解决了第二进程多线程并发时的数据安全问题,提高了客户端中第一进程获取响应的实时性和安全性。
在一些实施例中,如图3所示,步骤103具体包括:
步骤1031,将所述第二进程设置为同步状态,得到所述同步状态的第二进程,所述第二进程包括多个线程;
步骤1032,选择所述多个线程中所述对象锁对应的线程作为目标线程;
步骤1033,对所述同步状态的第二进程中所述对象锁对应的线程目标线程进行等待操作,得到等待线程;
步骤1034,通过所述等待线程响应所述请求,得到所述响应数据。
在上述方案中,同步状态指的是进程中的多个线程在同一时刻只能有一个线程处于执行状态,其中,执行状态可以包括wait()方法和同步块。同步状态可以保证线程对变量访问的可见性和排他性。本实施例优选的同步状态可以是安卓系统中的synchronize关键字。等待操作指的是获取对象锁的基础上将线程进入等待状态。本实施例优选的等待操作可以是java中的wait()方法。
例如,服务端中的第二进程中的状态线程通过wait()方法进入等待状态,通过状态线程完成对状态对象的数据提取,即获取导航状态数据作为响应数据,完成响应导航数据请求。
通过上述方案,通过对象锁以及等待操作实时获取了客户端中第一进程所需要的请求数据,为后续响应数据发送提供数据基础。
在一些实施例中,步骤1034具体包括:
通过所述等待线程调用所述同步状态的第二进程中的主线程响应所述请求,得到所述响应数据。
在上述方案中,主线程指的是无限循环运行状态的线程。本实施例优选的主线程可以是安卓系统中的UI(User Interface,用户界面)线程。
例如,通过UI线程完成对导航组件或导航业务的调用,进而实现导航状态数据的获取。
通过上述方案,在对象锁和同步状态的基础上完成了请求的响应过程,为后续响应数据的发送提供数据基础。
在一些实施例中,如图4所示,步骤104具体包括:
步骤1041,对所述同步状态的第二进程中至少一个线程进行所述唤醒操作,得到所述唤醒线程。
在上述方案中,第二进程中包括等待线程和其他处于等待状态的线程,唤醒操作可以对第二进程中的至少一个线程进行唤醒操作。
通过上述方案,通过对同步状态下的第二进程进行唤醒操作,完成了第二进程对请求的同步响应,为后续向第一进程发送响应数据提供了线程基础。
步骤1042,通过所述唤醒线程将所述响应数据发送到所述第一进程。
在上述方案中,唤醒操作指的是通知参与进程间通信的进程继续完成交互工作。本申请实施例中优选的唤醒操作可以是安卓系统中通知对象锁对应的线程返回等待状态的方法。例如,对服务端中的第二进程进行唤醒操作。
通过上述方案,通过唤醒线程使得第二进程可以同步响应第一进程,实现了客户端的第一进程中请求的同步响应和实时获取。
在一些实施例中,所示对所述同步状态的第二进程中至少一个线程进行所述唤醒操作,得到所述唤醒线程,包括:
对所述等待线程进行所述唤醒操作,得到所述唤醒线程;
或,
对所述同步状态的第二进程中全部线程进行所述唤醒操作,得到所述唤醒线程。
在上述方案中,本实施例优选的唤醒操作可以是notify()方法,对等待线程进行唤醒操作,也可以是notifyall()方法,对同步状态的第二进程中的全部线程进行唤醒操作。
通过上述方案,通过对同步状态下的第二进程进行唤醒操作,完成了第二进程对请求的同步响应,为后续向第一进程发送响应数据提供了线程基础。
在一些实施例中,步骤1042具体包括:
通过所述唤醒线程结束所述第二进程的所述同步状态,得到非同步状态的第二进程;
通过所述非同步状态的第二进程将所述响应数据发送到所述第一进程。
在上述方案中,由于安卓系统中的第一进程和第二进程只能有一个线程正在运行,而处于同步状态的第二进程有一个唤醒线程正在运行,所以不能运行向第一进程发送响应数据的线程。从而在通过唤醒线程结束第二进程的同步状态后将响应数据发送到第一进程。
通过上述方案,通过非同步状态的第二进程实现了客户端的第一进程中请求的同步响应和实时获取。
需要说明的是,本申请实施例的方法可以由单个设备执行,例如一台计算机或服务器等。本实施例的方法也可以应用于分布式场景下,由多台设备相互配合来完成。在这种分布式场景的情况下,这多台设备中的一台设备可以只执行本申请实施例的方法中的某一个或多个步骤,这多台设备相互之间会进行交互以完成所述的方法。
需要说明的是,上述对本申请的一些实施例进行了描述。其它实施例在所附权利要求书的范围内。在一些情况下,在权利要求书中记载的动作或步骤可以按照不同于上述实施例中的顺序来执行并且仍然可以实现期望的结果。另外,在附图中描绘的过程不一定要求示出的特定顺序或者连续顺序才能实现期望的结果。在某些实施方式中,多任务处理和并行处理也是可以的或者可能是有利的。
基于同一发明构思,在上述各个实施例方法对应实施方案的基础上,可以有如下具体实现情况。
如图5所示,本申请的实施例还可以包括:
步骤501、client(客户)进程(即上述实施例中的第一进程)通过binder(粘合)机制发起远程请求;
步骤502、binder机制挂起client进程中发起远程请求的线程;
步骤503、binder机制将远程请求的数据写入data对象;
步骤504、server(服务)进程(即上述实施例中的第二进程)通过transact方法确定data对象对应的对象锁,并根据对象锁确定data对象对应的线程;
步骤505、server进程通过wait(等待)方法对线程进行等待操作,得到等待线程;
步骤506、server进程中通过等待线程获取请求对应的响应数据;
步骤507、server进程唤醒全部等待状态的线程或只唤醒等待线程,得到唤醒线程;
步骤508、server进程通过唤醒线程调用ontransact方法和线程池将响应数据发送到reply对象中;
步骤509、binder机制调用唤醒线程唤醒client进程,并将reply对象中的响应数据发送到client进程,完成进程间通信过程。
在一些实施例中,客户端(client)调用服务器端(service)接口,wait使得客户端线程进程等待,然后调用服务端方法(transact、ontransact)抛到主线程执行,执行操作完成后调用了notify()方法或者notifyAll()方法然后返回数据到客户端,解决安卓系统跨进程通讯数据安全问题。
基于同一发明构思,与上述任意实施例方法相对应的,本申请还提供了一种进程间通信装置。
参考图6,所述进程间通信装置,包括:
接收模块201,被配置为接收客户端发来的第一进程的请求;
获取模块202,被配置为获取所述请求对应的对象锁;
响应模块203,被配置为根据所述对象锁通过第二进程同步响应所述请求,得到响应数据;
发送模块204,被配置为采用所述第二进程将所述响应数据发送到所述第一进程。
在一些实施例中,响应模块203具体包括:
设置单元,被配置为将所述第二进程设置为同步状态,得到所述同步状态的第二进程,所述第二进程包括多个线程;
选择单元,被配置为选择所述多个线程中所述对象锁对应的线程作为目标线程;
操作单元,被配置为对所述目标线程进行等待操作,得到等待线程;
响应单元,被配置为通过所述等待线程响应所述请求,得到所述响应数据。
在一些实施例中,响应单元具体被配置为:
通过所述等待线程调用所述同步状态的第二进程中的主线程响应所述请求,得到所述响应数据。
在一些实施例中,发送模块204包括:
唤醒单元,被配置为对所述同步状态的第二进程中至少一个线程进行所述唤醒操作,得到所述唤醒线程;
发送数据单元,被配置为通过所述唤醒线程将所述响应数据发送到所述第一进程。
在一些实施例中,唤醒单元具体还被配置为:
对所述等待线程进行所述唤醒操作,得到所述唤醒线程;
或,
对所述同步状态的第二进程中全部线程进行所述唤醒操作,得到所述唤醒线程。
在一些实施例中,发送数据单元具体被配置为:
通过所述唤醒线程结束所述第二进程的所述同步状态,得到非同步状态的第二进程;
通过所述非同步状态的第二进程将所述响应数据发送到所述第一进程。
为了描述的方便,描述以上装置时以功能分为各种模块分别描述。当然,在实施本申请时可以把各模块的功能在同一个或多个软件和/或硬件中实现。
上述实施例的装置用于实现前述任一实施例中相应的进程间通信方法,并且具有相应的方法实施例的有益效果,在此不再赘述。
基于同一发明构思,与上述任意实施例方法相对应的,本申请还提供了一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现上任意一实施例所述的进程间通信方法。
图7示出了本实施例所提供的一种更为具体的电子设备硬件结构示意图,该设备可以包括:处理器1010、存储器1020、输入/输出接口1030、通信接口1040和总线1050。其中处理器1010、存储器1020、输入/输出接口1030和通信接口1040通过总线1050实现彼此之间在设备内部的通信连接。
处理器1010可以采用通用的CPU(Central Processing Unit,中央处理器)、微处理器、应用专用集成电路(Application Specific Integrated Circuit,ASIC)、或者一个或多个集成电路等方式实现,用于执行相关程序,以实现本说明书实施例所提供的技术方案。
存储器1020可以采用ROM(Read Only Memory,只读存储器)、RAM(Random AccessMemory,随机存取存储器)、静态存储设备,动态存储设备等形式实现。存储器1020可以存储操作系统和其他应用程序,在通过软件或者固件来实现本说明书实施例所提供的技术方案时,相关的程序代码保存在存储器1020中,并由处理器1010来调用执行。
输入/输出接口1030用于连接输入/输出模块,以实现信息输入及输出。输入输出/模块可以作为组件配置在设备中(图中未示出),也可以外接于设备以提供相应功能。其中输入设备可以包括键盘、鼠标、触摸屏、麦克风、各类传感器等,输出设备可以包括显示器、扬声器、振动器、指示灯等。
通信接口1040用于连接通信模块(图中未示出),以实现本设备与其他设备的通信交互。其中通信模块可以通过有线方式(例如USB、网线等)实现通信,也可以通过无线方式(例如移动网络、WIFI、蓝牙等)实现通信。
总线1050包括一通路,在设备的各个组件(例如处理器1010、存储器1020、输入/输出接口1030和通信接口1040)之间传输信息。
需要说明的是,尽管上述设备仅示出了处理器1010、存储器1020、输入/输出接口1030、通信接口1040以及总线1050,但是在具体实施过程中,该设备还可以包括实现正常运行所必需的其他组件。此外,本领域的技术人员可以理解的是,上述设备中也可以仅包含实现本说明书实施例方案所必需的组件,而不必包含图中所示的全部组件。
上述实施例的电子设备用于实现前述任一实施例中相应的进程间通信方法,并且具有相应的方法实施例的有益效果,在此不再赘述。
基于同一发明构思,与上述任意实施例方法相对应的,本申请还提供了一种非暂态计算机可读存储介质,所述非暂态计算机可读存储介质存储计算机指令,所述计算机指令用于使所述计算机执行如上任一实施例所述的进程间通信方法。
本实施例的计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(PRAM)、静态随机存取存储器(SRAM)、动态随机存取存储器(DRAM)、其他类型的随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、快闪记忆体或其他内存技术、只读光盘只读存储器(CD-ROM)、数字多功能光盘(DVD)或其他光学存储、磁盒式磁带,磁带磁磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。
上述实施例的存储介质存储的计算机指令用于使所述计算机执行如上任一实施例所述的进程间通信方法,并且具有相应的方法实施例的有益效果,在此不再赘述。
基于同一发明构思,与上述任意实施例方法相对应的,本申请还提供了一种车辆,包括上述实施例中的电子设备,所述车辆设备实现上任意一实施例所述的进程间通信方法。
上述实施例的车辆用于执行如上任一实施例所述的进程间通信方法,并且具有相应的方法实施例的有益效果,在此不再赘述。
所属领域的普通技术人员应当理解:以上任何实施例的讨论仅为示例性的,并非旨在暗示本申请的范围(包括权利要求)被限于这些例子;在本申请的思路下,以上实施例或者不同实施例中的技术特征之间也可以进行组合,步骤可以以任意顺序实现,并存在如上所述的本申请实施例的不同方面的许多其它变化,为了简明它们没有在细节中提供。
另外,为简化说明和讨论,并且为了不会使本申请实施例难以理解,在所提供的附图中可以示出或可以不示出与集成电路(IC)芯片和其它部件的公知的电源/接地连接。此外,可以以框图的形式示出装置,以便避免使本申请实施例难以理解,并且这也考虑了以下事实,即关于这些框图装置的实施方式的细节是高度取决于将要实施本申请实施例的平台的(即,这些细节应当完全处于本领域技术人员的理解范围内)。在阐述了具体细节(例如,电路)以描述本申请的示例性实施例的情况下,对本领域技术人员来说显而易见的是,可以在没有这些具体细节的情况下或者这些具体细节有变化的情况下实施本申请实施例。因此,这些描述应被认为是说明性的而不是限制性的。
尽管已经结合了本申请的具体实施例对本申请进行了描述,但是根据前面的描述,这些实施例的很多替换、修改和变型对本领域普通技术人员来说将是显而易见的。例如,其它存储器架构(例如,动态RAM(DRAM))可以使用所讨论的实施例。
本申请实施例旨在涵盖落入所附权利要求的宽泛范围之内的所有这样的替换、修改和变型。因此,凡在本申请实施例的精神和原则之内,所做的任何省略、修改、等同替换、改进等,均应包含在本申请的保护范围之内。
Claims (10)
1.一种进程间通信方法,其特征在于,所述方法包括:
接收客户端发来的第一进程的请求;
获取所述请求对应的对象锁以及所述请求对应的第二进程;
根据所述对象锁通过所述第二进程同步响应所述请求,得到响应数据;
采用所述第二进程将所述响应数据发送到所述第一进程。
2.如权利要求1所述的方法,其特征在于,所述根据所述对象锁通过所述第二进程响应所述请求,得到响应数据,包括:
将所述第二进程设置为同步状态,得到所述同步状态的第二进程,所述第二进程包括多个线程;
选择所述多个线程中所述对象锁对应的线程作为目标线程;
对所述目标线程进行等待操作,得到等待线程;
通过所述等待线程响应所述请求,得到所述响应数据。
3.如权利要求2所述的方法,其特征在于,所述通过所述等待线程响应所述请求,得到所述响应数据,包括:
通过所述等待线程调用所述同步状态的第二进程中的主线程响应所述请求,得到所述响应数据。
4.如权利要求2所述的方法,其特征在于,所述采用所述第二进程将所述响应数据发送到所述第一进程,包括:
对所述同步状态的第二进程中至少一个线程进行所述唤醒操作,得到所述唤醒线程;
通过所述唤醒线程将所述响应数据发送到所述第一进程。
5.如权利要求4所述的方法,其特征在于,所述对所述同步状态的第二进程中至少一个线程进行所述唤醒操作,得到所述唤醒线程,包括
对所述等待线程进行所述唤醒操作,得到所述唤醒线程;
或,
对所述同步状态的第二进程中全部线程进行所述唤醒操作,得到所述唤醒线程。
6.如权利要求4所述的方法,其特征在于,所述通过所述唤醒线程将所述响应数据发送到所述第一进程,包括:
通过所述唤醒线程结束所述第二进程的所述同步状态,得到非同步状态的第二进程;
通过所述非同步状态的第二进程将所述响应数据发送到所述第一进程。
7.一种进程间通信装置,其特征在于,包括:
接收模块,被配置为接收客户端发来的第一进程的请求;
获取模块,被配置为获取所述请求对应的对象锁;
响应模块,被配置为根据所述对象锁通过第二进程同步响应所述请求,得到响应数据;
发送模块,被配置为采用所述第二进程将所述响应数据发送到所述第一进程。
8.一种电子设备,其特征在于,包括存储器、处理器及存储在所述存储器上并可由所述处理器执行的计算机程序,所述处理器执行所述计算机程序时实现如权利要求1至7任意一项所述的方法。
9.一种非暂态计算机可读存储介质,其特征在于,所述非暂态计算机可读存储介质存储计算机指令,所述计算机指令用于使计算机执行权利要求1至7任一所述方法。
10.一种车辆,其特征在于,包括:如权利要求9所述的电子设备。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210674721.5A CN115904745A (zh) | 2022-06-14 | 2022-06-14 | 进程间通信方法及相关设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210674721.5A CN115904745A (zh) | 2022-06-14 | 2022-06-14 | 进程间通信方法及相关设备 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN115904745A true CN115904745A (zh) | 2023-04-04 |
Family
ID=86476720
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202210674721.5A Pending CN115904745A (zh) | 2022-06-14 | 2022-06-14 | 进程间通信方法及相关设备 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN115904745A (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN116089049A (zh) * | 2023-04-07 | 2023-05-09 | 北京卡普拉科技有限公司 | 基于异步并行i/o请求的进程同步调度方法、装置以及设备 |
-
2022
- 2022-06-14 CN CN202210674721.5A patent/CN115904745A/zh active Pending
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN116089049A (zh) * | 2023-04-07 | 2023-05-09 | 北京卡普拉科技有限公司 | 基于异步并行i/o请求的进程同步调度方法、装置以及设备 |
CN116089049B (zh) * | 2023-04-07 | 2023-09-12 | 北京卡普拉科技有限公司 | 基于异步并行i/o请求的进程同步调度方法、装置以及设备 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN109582466B (zh) | 一种定时任务执行方法、分布式服务器集群及电子设备 | |
US10133598B2 (en) | Systems and methods of using a hypervisor to assign virtual processor priority based on task priority and to schedule virtual processors for guest operating systems | |
US10832224B2 (en) | Calendar based management of information technology (IT) tasks | |
CN110413822B (zh) | 离线图像结构化分析方法、装置、系统和存储介质 | |
EP2893444A1 (en) | Quota-based resource management | |
US9201691B2 (en) | Method, apparatus and system for coordinating execution of tasks in a computing system having a distributed shared memory | |
US8490118B2 (en) | Wait on address synchronization interface | |
CN109688191B (zh) | 流量调度方法及通信装置 | |
JP2014520346A5 (zh) | ||
KR20160130491A (ko) | 애플리케이션간 호출 중의 애플리케이션 디하이드레이션 및 리하이드레이션 | |
CN113032080A (zh) | 页面实现方法、应用程序、电子设备及存储介质 | |
CN110851276A (zh) | 一种业务请求处理方法、装置、服务器和存储介质 | |
CN115904745A (zh) | 进程间通信方法及相关设备 | |
CN115421787A (zh) | 指令执行方法、装置、设备、系统、程序产品及介质 | |
US20110113221A1 (en) | Data Sharing in Chip Multi-Processor Systems | |
WO2015176422A1 (zh) | 一种基于安卓系统的应用管理方法及其装置 | |
WO2023179183A1 (zh) | 子程序同步处理 | |
CN110120963B (zh) | 一种数据处理方法、装置、设备和机器可读介质 | |
CN114791854A (zh) | 用户态虚拟机任务的调度方法、装置、设备及存储介质 | |
CN116048771A (zh) | 一种资源调度方法及相关设备 | |
CN113672358A (zh) | 定时任务处理方法及装置、系统、电子设备和存储介质 | |
CN106484536B (zh) | 一种io调度方法、装置和设备 | |
CN110633141A (zh) | 一种应用程序的内存管理方法、装置、终端设备及介质 | |
CN116028204B (zh) | 进程管控方法和电子设备 | |
CN112905267B (zh) | 虚拟机接入协程库的方法、装置及设备 |
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 |