具体实施方式
为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
在本发明实施例中使用的术语是仅仅出于描述特定实施例的目的,而非旨在限制本发明。在本发明实施例和所附权利要求书中所使用的单数形式的“一种”、“所述”和“该”也旨在包括多数形式,除非上下文清楚地表示其他含义,“多种”一般包含至少两种,但是不排除包含至少一种的情况。
应当理解,本文中使用的术语“和/或”仅仅是一种描述关联对象的关联关系,表示可以存在三种关系,例如,A和/或B,可以表示:单独存在A,同时存在A和B,单独存在B这三种情况。另外,本文中字符“/”,一般表示前后关联对象是一种“或”的关系。
取决于语境,如在此所使用的词语“如果”、“若”可以被解释成为“在……时”或“当……时”或“响应于确定”或“响应于识别”。类似地,取决于语境,短语“如果确定”或“如果识别(陈述的条件或事件)”可以被解释成为“当确定时”或“响应于确定”或“当识别(陈述的条件或事件)时”或“响应于识别(陈述的条件或事件)”。
需要说明的是,本发明所涉及的用户信息(包括但不限于用户设备信息、用户个人信息等)和数据(包括但不限于用于分析的数据、存储的数据、展示的数据等),均为经用户授权或者经过各方充分授权的信息和数据,并且相关数据的收集、使用和处理需要遵守相关国家和地区的相关法律法规和标准,并提供有相应的操作入口,供用户选择授权或者拒绝。
还需要说明的是,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的商品或者系统不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种商品或者系统所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的商品或者系统中还存在另外的相同要素。
在对本发明下述各实施例进行详细描述之前,可以先对下述实施例中涉及到的相关概念进行介绍:
分布式处理(distributed processing)系统:将不同地点的、或者具有不同功能的、或者拥有不同数据的多个物理设备通过通信网络连接起来并进行统一管理控制,以协调地完成大规模数据传输任务或者信息处理任务的系统。
进程间通信(Inter Process Communication,简称IPC):在不同进程之间进行数据传输或交换信息的过程。并且发生通信的两进程可以分别称为接收进程和发送进程。运行有发送进程和接收进程的CPU可以部署在分布式处理系统中一台或者多台物理设备中。
其中,发送进程可以为发起IPC的一方。发送进程可以产生待处理请求,还可以获取待处理请求的请求响应结果。运行有发送进程的CPU可以包括物理CPU或者虚拟CPU。发送进程可以是系统进程或者应用进程。
其中,接收进程可以为响应请求的一方。接收进程在接收到待处理请求后,可以执行在本地部署的、与该请求对应的函数。该函数执行结果可以认为是待处理请求的请求响应结果。运行有接收进程的CPU可以包括物理CPU或者虚拟CPU。接收进程可以是系统进程或者应用进程。
节点:指支持IPC通信的实体,是一个独立的处理单元。在实际应用中,一个节点可以对应于一个CPU。可选地,该CPU可以是物理CPU,也可以是虚拟CPU。分布式处理系统中的一台物理设备可以部署有至少一个节点。
计算快速链接(Compute Express Link,简称CXL):一种高速串行协议,它用于在不同节点之间进行快速、可靠的数据传输。
在对本发明下述各实施例进行详细描述之前,还可以先对本发明的使用背景进行简要说明:
根据上述描述可知,运行有发送进程和接收进程的CPU可以部署在分布式处理系统中的一台或者多台物理设备中,则在实际中,此分布式处理系统具体可以为通信系统中的服务端集群。可选地,该通信系统可以具有客户端/服务端(Client/Server,简称C/S)架构。架构中的服务端用于数据管理,客户端用于与用户进行交互。
其中,在基于两层C/S架构的通信网络中,可选地,客户端和服务端的数量可以分别为至少一个。
其中,基于三层C/S架构的通信网络具体可以包括客户端,以及应用服务端和数据库服务端。可选地,客户端、应用服务端以及数据服务端的数量可以分别为至少一个,应用服务端和数据库服务端具体可以分别表现为一个分布式服务端集群。
根据上述描述还可知,IPC可以发生在分布式处理系统包含的不同CPU中,即本发明下述各实施例中涉及到的IPC本质上都是跨节点的IPC。并且此跨节点的IPC可以发生在单机中,则发送进程和接收进程可以分别运行在任一服务端的不同CPU中。此跨节点的IPC还可以发生在分布式处理系统中的多台物理设备之间,则发送进程和接收进程可以分别运行在不同的服务端中,也可以运行在同一服务端的不同CPU中。
为了加速跨节点IPC的速度,则可以使用本发明下述各实施例提供的进程间通信系统和方法。
下面结合附图对本发明的一些实施方式作详细说明。在各实施例之间不冲突的情况下,下述的实施例及实施例中的特征可以相互组合。另外,下述各方法实施例中的步骤时序仅为一种举例,而非严格限定。
图1为本发明实施例提供的一种进程间通信系统的结构示意图。如图1所示,该系统可以包括:通信连接的物理主机和外接设备。
其中,进行通信的发送进程和接收进程可以分别运行在物理主机不同的CPU中,也即是发送进程和接收进程可以运行在不同的节点中。可选地,物理主机的数量可以是至少一个,一个物理主机中可以配置有至少一个CPU。
其中,外接设备中的内存可以设置为发送进程和接收进程的共享内存。发送进程和接收进程可以将共享内存视为自身的本地内存直接进行访问。
可选地,外接设备的内存还可以被划分为至少一个内存段,则该外接设备中的全部或者部分内存段可以设置为发送进程和接收进程的共享内存。外接设备可以是至少一个。并且至少一个外接设备中的至少一个内存段可以使用内存交错(Memory Interleave)的方式组成地址空间连续的同一块区域,该区域即为发送进程和接收进程的共享内存。可选地,该共享内存可以作为全局结构附接存储器(Global-Structure Attached Memory,简称G-FAM)。
可选地,具有通信关系的不同发送进程和不同接收进程之间的共享内存可以是外界设备中不同的内存段。
基于上述介绍,则本实施例提供的进程间通信系统的工作过程,也即是跨节点的IPC具体可以包含以下阶段:
第一阶段,发送进程可以生成待处理请求。进一步地,发送进程还可以将待处理请求写入共享内存的第二存储空间,共享内存中存储的第二指针指向该第二存储空间。
第二阶段,接收进程可以先确定共享内存中的第二指针,再从第二指针指向的第二存储空间中读取该待处理请求,并对该请求进行响应,以得到请求响应结果。然后,接收进程还可以将请求响应结果写入共享内存的第一存储空间,共享内存中存储的第一指针指向该第一存储空间。
第三阶段,发送进程可以先确定共享内存中的第一指针,再从第一指针指向的第一存储空间中读取请求响应结果,从而完成跨节点的IPC。
可选地,运行有发送进程和接收进程的不同CPU可以是不同的物理CPU,该物理CPU可以部署在分布式处理系统的一台或者多台物理设备中。可选地,运行有发送进程和接收进程的不同CPU还可以是一个物理CPU中不同的虚拟CPU,该物理CPU可以部署在分布式处理系统的一台物理设备中。
在第一阶段中,可选地,发送进程可以在不同时机下产生待处理请求。一种情况,当用户对客户端触发操作服务端对此操作进行响应时,运行在服务端部署的CPU中的发送进程可以产生待处理请求。另一种情况,在服务端的日常运行过程中,发送进程也可以产生待处理请求。
在第一阶段和第三阶段中,发送进程存在从共享内存中写入待处理请求和读取请求响应结果的过程。在第二阶段中,接收进程存在从共享中读取待处理请求和写入请求响应结果的过程。由于发送进程和接收进程可以将共享内存视为自身的本地内存进行读写,因此,相比于通过网络传输待处理请求和请求响应结果,借助共享内存,发送进程和接收进程可以以较快地速度实现待处理请求以及请求响应结果的读写,也即是提高跨节点IPC的速度。
另外,在待处理请求的读写过程中,发送进程可以先获取指针,再从指针指向的存储空间中进行待处理请求的写入或者请求响应结果的读取。类似的,接收进程也是先获取指针再对指针指向的存储空间进行数据读写。则相比于直接在进程间传递数据(待处理请求和请求响应结果),上述方式能够减少IPC过程中的数据传输量,减少数据传输开销,从而提高跨节点IPC的速度。
对于进程对共享内存的读写,当CPU和外接设备都支持CXL.cache协议时,一种可选地方式,发送进程可以直接借助CXL.cache协议实现共享内存的访问,即从共享内存中写入待处理请求,读取请求响应结果。类似的,接收进程同样也可以借助CXL.cache协议实现共享内存的访问,即从共享内存中读取待处理请求,写入请求响应结果。
当CPU或外接设备不支持CXL.cache协议时,另一种可选地方式,发送进程可以响应于发送进程所属的CPU发送的控制指令,实现共享内存的读取。类似的,接收进程也可以响应于接收进程所属的CPU发送的控制指令,实现共享内存的读取。
本实施例中,物理主机与外接设备通信连接,发送进程和接收进程可以运行在物理主机不同的CPU中,且发送进程和接收进程共享外接设备中的内存。
则发送进程生成的待处理请求可以写入共享内存中第二指针指向的第二存储空间。接收进程可以对该请求进行响应,并将请求响应结果写入共享内存中第一指针指向的第一存储空间。最终,发送进程又可以先获取第一指针,并从第一指针指向的第一存储空间读取请求响应结果,从而实现跨节点的IPC。
上述工作过程中,一方面,运行在不同CPU中的发送进程和接收进程可以将外接设备提供的共享内存视为自身的本地内存进访问,从而可以降低读写请求和响应结果所需的网络开销,加速待处理请求的写入以及请求响应结果的读取。也就是说,借助共享内存可以提高跨节点IPC的速度。
另一方面,在实现跨节点IPC的过程中,发送进程可以将待处理请求的指针传递给接收进程,而非直接将待处理请求传递给接收进程。对应的,接收进程可以将请求响应结果的指针传递给发送进程,而非直接将请求响应结果传递给发送进程。也即是通信双方是通过引用传递(指针传递)而非值传递的方式将数据由一方传给另一方,从而能够减少IPC过程中的数据传输量,减少数据传输开销,提高跨节点IPC的速度。
另外,上述进程间通信系统所能实现的技术效果还可以结合以下内容理解:
1、发送进程和接收进程可以借助网络进行待处理请求和请求响应的读写完成一个IPC需要一次网络往返。如图2中的(a)所示,借助网络,发送进程可以将待处理请求从运行有发送进程的CPU I的内存中写入运行有接收进程的CPU II的内存中。在接收进程接收到待处理请求后,又可以将确认消息从CPU II的内存写入CPU I的内存中。类似的,接收进程生成请求响应结果后可以按照相同的方式,借助网络反馈给发送进程。
并且实际中,该网络往返时间可以为几微秒甚至十几微秒。可见,IPC的速度很慢。
为了提高IPC速度,发送进程和接收进程还可以借助远程直接内存访问(RemoteDirect Memory Access,简称RDMA)来实现待处理请求和请求响应的读写。但利用RDMA进行数据读写还是需要访问其他设备的内存,这种跨设备的内存访问方式同样也会存在IPC速度慢的问题。实际中,使用此种方式完成一个IPC所需的时间可以为2微秒。
而与上述两种方式不同,使用本发明各实施例提供的系统进行IPC时,由于共享内存可以视为本地内存以由发送进程和接收进行直接访问,因此,可以大大缩短完成一个IPC的所需的时间。实际中,完成一个IPC的时间可缩短为300纳秒。此过程可以结合图2中的(b)理解。
2、当借助网络传输待处理请求和请求响应结果时,网络质量就可以影响IPC的速度,并且当不同CPU之间存在大量IPC时还容易引起网络拥塞。而本使用本发明各实施例提供的系统进行IPC时,借助可以作为本地内存进行直接访问的共享内存即可实现待处理请求和请求响应结果读写。由于读取本地内存不需要借助网络,因此,这种IPC的方式也不会受网络质量的影响。并且即使存在大量的IPC也不会出现网络拥塞,从而保证网络中的其他数据处理可以不受大量IPC的影响。
需要说明的有,上述描述提及的IPC可以是跨节点的IPC。
在图1所示系统的基础上,图3为本发明实施例提供的另一种进程间通信系统的结构示意图。如图3所示,被发送进程和接收进程共享的内存中具体设置有消息队列和数据存储空间。
其中,数据存储空间用于存储发送进程产生的待处理请求以及接收进程产生的请求响应结果。具体的,数据存储空间中的第一存储空间存储请求响应结果,数据存储空间中的第二存储空间存储待处理请求。
消息队列用于存储指向数据存储空间中不同存储空间的指针以及反映该存储空间中数据写入状态的写入状态标识。可选地,消息队列具体可以是单生产者单消费者(Single-Producer Single-Consumer简称SPSC)队列。消息队列的长度可以为64位。队列中存储数据的类型具体可以是无符号的整数类型。
为了后续描述简洁、清晰,可以将反映请求响应结果写入状态的写入状态标识称为第一写入状态标识,将反映待处理请求写入状态的写入状态标识称为第二写入状态标识。则下面可以进一步描述图3所示系统的工作过程:
在第一阶段中,发送进程可以产生待处理请求。之后,发送进程可以从将此待处理请求写入数据存储空间中的第二存储空间,同时发送进程还可以将指向该第二存储空间的第二指针,以及反映待处理请求写入状态的第二写入状态标识一并写入消息队列中。
对于发送进程针对消息队列的写入过程,可选地,发送进程可以根据自身当前的队列写入位置,将第二指针对应的指针偏移量以及第二写入状态标识写入消息队列中。即发送进程写入的不是完整的第二指针而是第二指针对应的偏移量。
在第二阶段中,若接收进程确定第二写入状态标识反映待处理请求写入完成,则接收进程可以先确定共享内存中存储的第二指针,再从第二指针指向的第二存储空间中读取该待处理请求,并对该请求进行响应,以得到请求响应结果。然后,接收进程还可以将请求响应结果写入共享内存的第一存储空间,同时,接收进程还可以将指向该第一存储空间的第一指针,以及反映请求响应结果写入状态的第一写入状态标识一并写入消息队列。
对于接收进程针对消息队列的写入过程,可选地,接收进程可以根据该自身当前的队列写入位置,将第一指针对应的指针偏移量以及第一写入状态标识写入消息队列中。即接收进程写入的不是完整的第一指针而是第一指针对应的偏移量。
并且由于写入消息队列的并不是完整的指针而是指针偏移量,因此,对于接收进程确定第二指针的过程,可选地,接收进程可以根据自身当前的队列读取位置,从消息队列中读取第二写入状态标识。若读取到的第二写入状态标识反映待处理请求写入完成,则接收进程可以进一步从消息队列中读取指针偏移量,再根据指针偏移量确定第二指针。
在第三阶段中,若发送进程确定第一写入状态标识反映请求响应结果写入完成,则发送进程可以先确定共享内存中的第一指针,再从第一指针指向的第一存储空间中读取请求响应结果,从而完成跨节点的IPC。
由于写入消息队列的并不是完整的指针而是指针偏移量,因此,可选地,对于发送进程确定第一指针的过程,发送进程可以根据自身当前的队列写入位置,从消息队列中读取第一写入状态标识。若读取到的第一写入状态标识反映请求响应结果写入完成,则发送进程可以从消息队列中读取指针偏移量,并根据指针偏移量确定第一指针。
本实施例中系统的具体工作过程还可以结合图4理解。在图4中,数据存储空间被划分为至少一个缓存行(Cache Line),待处理请求或者请求响应结果可以分别写入至少一个缓存行。并且发送进程在消息队列中的读取位置可以用tail1表示;进程在消息队列中的写入位置可以用head1表示。接收进程在消息队列中的读取位置可以用tail2表示;接收在消息队列中的写入位置可以用head2表示。该读取和写入位置并未在图中示出。
本实施例中,借助共享内存中设置的消息队列,使得在实现跨节点IPC的过程中,发送进程可以将待处理请求的指针传递给接收进程,对应的,接收进程可以将请求响应结果的指针传递给发送进程。也即是通信双方是通过引用传递(指针传递)而非值传递的方式将数据由一方传给另一方,从而能够减少IPC过程中的数据传输量,减少数据传输开销,提高跨节点IPC的速度。
另外,本实施例中未详细描述的内容以及所能实现的技术效果可以参见上述各实施例中的相关描述,在此不再赘述。
图1所示实施例中已经提及了,当运行有发送进程或者接收进程的CPU或外接设备不支持CXL.cache协议时,在跨节点的IPC过程中,发送进程和接收进程都使用了非临时内存读取(Non-temporal memory access)操作,也即是发送进程可以响应于发送进程所属的CPU发送的控制指令,实现共享内存的读写。类似的,接收进程可以响应于接收进程所属的CPU发送的控制指令,实现共享内存的读取。
则基于图3所示实施例描述的跨节点IPC的不同阶段中,发送进程和接收进程的写入和读取过程又可以进一步详细描述为:
在第一阶段,发送进程可以响应于由运行有该发送进程的CPU产生的写入控制指令,将待处理请求写入共享内存的第二存储空间。同时,发送进程响应于写入控制指令,也将指向第二存储空间的第二指针以及第二写入状态标识写入共享内存设置的消息队列中。更具体来说,发送进程写入的是第二指针对应的指针偏移。可选地,写入控制指令具体可以包括prefetch指令和lfence指令。
在第二阶段,接收进程可以响应于由运行有该接收进程的CPU产生的读取控制指令,从消息队列中读取第二写入状态标识以及第二指针。接收进程同样可以响应于读取控制指令,从第二存储空间中读取待处理请求。更具体来说,接收进程读取的是第二指针对应的指针偏移量。可选地,读取控制指令具体可以包括sfence指令和clflush指令。
在第二阶段,接收进程还可以响应于由运行有该接收进程的CPU产生的写入控制指令,将请求响应结果写入共享内存中第一指针指向的第一存储空间。接收进程同样可以响应于写入控制指令,将第一指针(具体来说是第一指针对应的指针偏移量)以及第一写入状态标识写入共享内存设置的消息队列中。
在第三阶段,发送进程可以响应于由运行有该发送进程的CPU产生的读取控制指令,从消息队列中读取第一写入状态标识,以及第一指针(具体来说是第一指针对应的指针偏移量)。发送进程还可以响应于读取控制指令,从第一存储空间中读取请求响应结果。
本实施例中,发送进程和接收进程采用非临时内存读取操作后,运行有发送进程和接收进程的CPU可以产生相应的读取控制指令和接收控制指令,该控制指令的使用可以保证发送进程和接收进程从共享内存进行数据读写。即本实施例中,读取控制指令和写入控制指令可以作为CXL.cache协议的替换,以在不支持CXL.cache协议的情况下仍然能够快速完成IPC。
另外,本实施例中未详细描述的内容以及所能实现的技术效果可以参见上述各实施例中的相关描述,在此不再赘述。
在上述各实施例提供的跨节点IPC过程中,在发送进程将待处理请求成功写入第二存储空间,即第二写入状态标识为写入完成后,接收进程可以对该待处理请求进行读取。类似的,在接收进程将请求响应结果成功写入第一存储空间,即第一写入状态标识为写入完成后,发送进程也可以对该请求响应结果进行读取。
对于发送进程和接收进程开始读取的时机,可选地,运行有发送进程的CPU可以不断轮询,以不断读取消息队列中的第一写入状态标识,并根据读取到的标识确定能够是否可以从数据存储空间(更具体是第一存储空间)中读取请求响应结果。类似的,运行有接收进程的CPU也可以不断轮询,以不断读取消息队列中的第二写入状态标识,并根据读取到的标识能够是否可以从数据存储空间(更具体是第二存储空间)中读取待处理请求。
上述方式中,通过CPU的不断轮询,能够使发送进程或者接收进程及时进行请求响应结果和待处理请求的读取。
然而在实际中,CPU除了要执行轮询任务,即要不断轮询消息队列中的第一写入状态标识和第二写入状态标识,往往还需要执行其他处理任务。而轮询任务的高频率执行显然会增大CPU的工作压力,严重情况下,还有可能导致其他处理任务无法执行。并且当待处理请求和请求响应结果的读写频率较低时,高频率的轮询任务实际上也是对CPU资源的浪费。
则对于发送进程开始读取的时机,可选地,响应于运行有发送进程的CPU处于空闲状态,发送进程可以执行该CPU生成的监听指令,以监听共享内存设置的数据存储空间中的数据是否发生修改。通过监听指令的指令,发送进程可以知悉数据存储空间中可能有新写入的响应请求结果。
若数据存储空间中的数据发生修改,则发送进程可以从消息队列中读取第一写入状态标识,并根据第一写入状态标识进一步确定是否真的有新写入的响应请求结果。并且在监听指令执行预设时长后,运行有发送进程的CPU还可以生成等待指令。发送进程可以进一步执行该等待指令,以暂停对数据存储空间的监听。
可选地,CPU可以以缓存行为粒度不断发出监听指令,以依次监听数据存储空间中的数据是否发生修改。
可选地,监听指令可以是中的monitor指令,等待指令可以是中的mwait指令。上述指令可以为SIMD流技术扩展或数据流单指令多数据扩展指令集3(Streaming SIMDExtensions 3,简称SSE3)中的内嵌指令。其中,SIMD(Single Instruction MultipleData)指的是单指令流多数据流。
本实施例中,通过监听指令和等待指令的使用,能够保证发送进程是在CPU空闲时才进行写入状态标识读取的,从而能够降低写入状态标识的读取频率,提高CPU资源的利用率,减小CPU的工作压力。
对于接收进程开始读取的时机,可选地,响应于运行有接收进程的CPU处于空闲状态,执行该CPU产生的监听指令,以监听共享内存设置的数据存储空间中的数据是否发生修改。通过监听指令的指令,接收进程可以知悉数据存储空间中可能有新写入的待处理请求。
若数据存储空间中的数据发生修改,则接收进程可以从消息队列中读取第二写入状态标识,并根据第二写入状态标识进一步确定是否真的有新写入的待处理请求。并且在监听指令执行预设时长后,运行有接收进程的CPU还可以生成等待指令。接收进程可以进一步执行该等待指令,以暂停对数据存储空间的监听。
其中,对数据存储区域的监听粒度,以及对监听指令和等待指令的具体解释可以参见上述实施例中的描述,在此不再赘述。
本实施例中,通过监听指令和等待指令的使用,能够保证接收进程是在CPU空闲时才进行写入状态标识读取的,从而能够降低写入状态标识的读取频率,提高CPU资源的利用率,减小CPU的工作压力。
在使用上述各实施例提供的系统进行跨节点IPC的过程中,共享内存是提高IPC速度的关键。而该共享内存可以由共享内存管理设备进行分配。则图5为本发明实施例提供的又一种进程间通信系统的结构示意图。在图3所示系统的基础上,该系统还包括共享内存管理设备。并且部署有CPU的物理主机上还设置有总线插槽(Peripheral ComponentInterconnect Express slot,简称PCIE slot)。
其中,共享内存管理设备用于按照预设规则为发送进程和接收进程分配共享内存。可选地,共享内存管理设备具体可以表现为支持CXL.cache协议的交换机。共享内存管理设备还可以是安装有共享内存管理软件的电子设备。发送进程或接收进程可以利用总线插槽直接访问共享内存。
本实施例中,内存管理设备用于进行共享内存的分配,以使发送进程和接收进程利用分配到的共享内存实现快速的跨节点IPC。
上述各实施例中已经提及,运行有发送进程和接收进程的CPU可以部署在分布式处理系统中的至少一台物理主机中。外接设备也可以是至少一个。则图5所示系统可以进一步细化为图6。图6为本发明实施例提供的又一种进程间通信系统的结构示意图。如图6所示,进程间通信系统可以包括N个CPU、L个外接设备以及共享内存管理设备。
可选地,图6所示的N个CPU可以部署在至少一个物理主机上。如图6所示,在该系统中,共享内存管理设备可以将外接设备1中的内存段A分配给CPU1、CPU2,则分别运行在CPU1和CPU2上的进程在发生IPC时,可以共享该内存段A。类似的,共享内存管理设备还可以将外接设备1中的内存段B分配给CPU1和CPU N,则分别运行在CPU1和CPU N上的进程在发生IPC时,可以共享该内存段B。
可选地,任一外接设备中还可以存在未被设置为共享内存的内存段,这些内存段还可以被物理主机上的某一CPU独占。继续承接图6所示的系统,外接设备2中的部分内存段(以斜线标注)可以被CPU1独占。外接设备2和外接设备L中的部分内存段(以交叉线标注)可以被CPU3独占。其中,内存段与网络节点之间的独占关系也可以根据需求人为设置。
本实施例中,外接设备提供的至少一个内存段又可以进一步细分为共享内存和非共享内存。共享内存被接收进程和发送进程共享,非共享内存被一CPU独占,使得外接设备中的内存使用的更加灵活性,利用率更高。
基于上述系统实施例,下面还可以从方法的角度分别描述发送进程和接收进程各自的工作过程。
图7为本发明实施例提供的一种进程间通信方法的流程图。本发明实施例提供的该方法可以由进程间通信系统中的发送进程执行。如图7所示,该方法可以包括如下步骤:
S101,生成待处理请求。
S102,确定共享内存中存储的第一指针,共享内存为与中央处理器CPU通信连接的外接设备中的内存。
S103,从共享内存中第一指针指向的第一存储空间中,读取接收进程生成的请求响应结果,发送进程和接收进程运行在不同的CPU中。
发送进程生成待处理请求,并由接收进行对其进行响应,以得到请求响应结果。然后,发送进程可以先确定共享内存中存储的第一指针,在共享内存中从第一指针指向的第一存储空间中读取请求响应结果。
本实施例中,待处理请求的生成时机、待处理请求的写入过程、响应请求结果的读取过程以及共享内存的结构均可以参见上述各实施例中的相关描述,在此不再赘述。
本实施例中,发送进程生成待处理请求后,接收进程可以对其进行响应,以得到待处理请求的请求响应结果。发送进程可以借助第一指针,从该指针指向的共享内存的第一存储空间中直接读取到请求响应结果。其中,发送进程和接收进程运行在不同的CPU中,共享内存为与此不同的CPU通信连接的外接设备中的内存。
上述方法中,一方面,运行在不同CPU中的发送进程和接收进程可以将外接设备提供的共享内存视为自身的本地内存进访问,以降低读写请求和响应结果所需的网络开销,从而加速待处理请求的写入以及请求响应结果的读取。也就是说,借助共享内存可以提高跨节点IPC的速度。
另一方面,在实现跨节点IPC的过程中,接收进程可以将请求响应结果的指针传递给发送进程,而非直接将请求响应结果传递给发送进程。也即是接收进程可以通过引用传递而非值传递的方式将请求响应结果传递给发送进程,发送进程可以借助引用传递最终获取请求响应结果,因此,能够减少IPC过程中的数据传输开销,提高跨节点IPC的速度。
另外,本实施例所能实现的技术效果也可以参见上述图1~图6所示实施例中的相关描述,在此不再赘述。
可选地,在步骤S101后,发送进程还可以进一步将该请求写入共享内存的第二存储空间中。写入的具体过程也可以参见上述各实施例中的相关描述,在此不再赘述。
图8为本发明实施例提供的另一种进程间通信方法的流程图。本发明实施例提供的该方法可以由进程间通信系统中的接收进程执行。如图8所示,该方法可以包括如下步骤:
S201,确定共享内存中存储的第二指针,共享内存为与中央处理器CPU通信连接的外接设备中的内存。
S202,从第二指针指向的共享内存的第二存储空间中,读取发送进程生成的待处理请求,发送进程和接收进程运行在不同的CPU中。
S203,响应待处理请求,以得到请求响应结果,并由发送进程获取。
在发生进程写入待处理请求后,接收进程可以先确定共享内存中的第二指针,并从该第二指针指向的共享内存的第二存储空间中读取待处理请求。接收进程响应该待处理请求,以得到请求响应结果。
并且在步骤S03之后,接收进程还可以将请求响应结果写入共享内存的第一存储空间中。
本实施例中,待处理请求的读取过程、请求响应结果的写入过程、共享内存的结构均可以参见上述各实施例中的相关描述,在此不再赘述。
另外,本实施例中未详细描述的内容以及所能实现的技术效果也可以参见上述图1~图6所示实施例中的相关描述,在此不再赘述。
上述各实施例已经从系统和方法角度对跨节点IPC的过程进行了详细说明,为了便于理解,下面可以以一具体场景说明上述进程间通信系统和方法的具体实现过程。
继续承接上述各实施例提供的C/S架构,客户端中可以安装有APP,用户在使用APP中的任一功能的过程中,运行在作为分布式处理系统的服务端集群中不同CPU上的发送进程和接收进程便需要进行通信,即跨节点的IPC可以在APP的使用过程中出现。
其中,根据APP的不同,目标功能也可以多种多样。比如APP可以是多媒体数据编辑APP,也可以是即时通信APP,直播APP等等。对于多媒体数据编辑APP,其提供的功能可以音频、图像、视频的编辑等等。对于即使通信APP,其提供的功能可以包括语音交互、文字交互等等。对于直播APP,其提供的功能可以包括观看直播、连麦、赠送礼物、留言等等。
除了上述APP的场景,可选地,分布式处理系统还可以用作数据库,则在对数据库进行增删改查的过程也可以出现跨节点的IPC。
上述只是示意性地给出了一些出现跨节点IPC的场景,而对于实际中任一出现跨节点IPC的场景,IPC的具体实现过程都可以参见上述各实施例中的相关描述,在此不再赘述。
以下将详细描述本发明的一个或多个实施例的进程间通信装置。本领域技术人员可以理解,这些调用装置均可使用市售的硬件组件通过本方案所教导的步骤进行配置来构成。
图9为本发明实施例提供的一种进程间通信装置的结构示意图,如图9所示,该装置包括:
生成模块11,用于生成待处理请求。
第一指针确定模块12,用于确定共享内存中存储的第一指针,所述共享内存为与中央处理器CPU通信连接的外接设备中的内存。
结果读取模块13,用于从所述共享内存中所述第一指针指向的第一存储空间中,读取接收进程生成的请求响应结果,所述发送进程和所述接收进程运行在不同的CPU中。
所述发送进程和所述接收进程运行在不同的物理CPU中,或者运行在同一物理CPU中不同的虚拟CPU中。
可选地,所述第一指针确定模块12,用于根据所述发送进程当前的队列读取位置,从所述共享内存设置的消息队列中读取写入状态标识;若读取到的写入状态标识反映所述请求响应结果写入完成,则从所述消息队列中读取指针偏移量;根据所述指针偏移量,确定所述第一指针。
其中,所述发送进程和所述接收进程利用计算快速链接CXL访问所述共享内存。
可选地,所述第一指针确定处理模块12,用于响应于由运行有所述发送进程的CPU产生的读取控制指令,从所述消息队列中读取所述写入状态标识;响应于所述读取控制指令,从所述消息队列中读取所述指针偏移量。
所述结果读取模块13,用于响应于所述读取控制指令,从所述第一存储空间中读取所述请求响应结果。
可选地,所述第一指针确定处理模块12,用于响应于运行有所述发送进程的CPU处于空闲状态,执行监听指令,以监听所述共享内存设置的数据存储空间中的数据是否发生修改,所述待处理请求和所述请求响应结果存储于所述数据存储空间中;若所述数据存储空间中的数据发生修改,则从所述消息队列中读取所述写入状态标识;执行等待指令,以暂停监听所述数据存储空间。
可选地,所述装置还包括:请求写入模块14,用于响应于由运行有所述发送进程的CPU产生的写入控制指令,将所述待处理请求写入所述共享内存的第二存储空间;
响应于所述写入控制指令,将指向所述第二存储空间的第二指针以及反映所述待处理请求写入完成的写入状态标识写入所述共享内存设置的消息队列中,所述第一存储空间和所述第二存储空间为所述共享内存设置的数据存储空间中的存储空间。
图9所示装置可以执行图9所示实施例的方法,本实施例未详细描述的部分,可参考对图9所示实施例的相关说明。该技术方案的执行过程和技术效果参见图9所示实施例中的描述,在此不再赘述。
在一个可能的设计中,上述各实施例提供的进程间通信方法可以应用在一电子设备中,如图10所示,该电子设备可以包括:第一处理器21和第一存储器22。所述第一存储器22用于存储支持该电子设备执行上述图7所示实施例中提供的进程间通信方法的程序,所述第一处理器21被配置为用于执行所述第一存储器22中存储的程序。
所述程序包括一条或多条计算机指令,其中,所述一条或多条计算机指令被所述第一处理器21执行时能够实现如下步骤:
生成待处理请求;
确定共享内存中存储的第一指针,所述共享内存为与中央处理器CPU通信连接的外接设备中的内存;
从所述共享内存中所述第一指针指向的第一存储空间中,读取接收进程生成的请求响应结果,所述发送进程和所述接收进程运行在不同的CPU中。
可选地,所述第一处理器21还用于执行前述图7所示实施例中的全部或部分步骤。
其中,所述电子设备的结构中还可以包括第一通信接口23,用于该电子设备与其他设备或通信网络通信。
图11为本发明实施例提供的另一种进程间通信装置的结构示意图,如图11所示,该装置包括:
第二指针确定模块31,用于确定共享内存中存储的第二指针,所述共享内存为与中央处理器CPU通信连接的外接设备中的内存。
请求读取模块32,用于从所述第二指针指向的所述共享内存的第二存储空间中,读取发送进程生成的待处理请求,所述发送进程和所述接收进程运行在不同的所述CPU中。
响应模块33,用于响应所述待处理请求,以得到请求响应结果,并由所述发送进程获取。
可选地,所述装置还包括:结果写入模块34,用于响应于由运行有所述接收进程的CPU产生的写入控制指令,将所述请求响应结果写入所述共享内存中第一指针指向的第一存储空间,所述第一存储空间和所述第二存储空间为所述共享内存设置的数据存储空间中的存储空间;
响应于所述写入控制指令,将所述第一指针以及反映所述请求响应结果写入成功的写入状态标识写入所述共享内存设置的消息队列中。
图11所示装置可以执行图8所示实施例的方法,本实施例未详细描述的部分,可参考对图8所示实施例的相关说明。该技术方案的执行过程和技术效果参见图8所示实施例中的描述,在此不再赘述。
在一个可能的设计中,上述各实施例提供的进程间通信方法可以应用在另一电子设备中,如图12所示,该电子设备可以包括:第二处理器41和第二存储器42。所述第二存储器42用于存储支持该电子设备执行上述图8所示实施例中提供的进程间通信方法的程序,所述第二处理器41被配置为用于执行所述第二存储器42中存储的程序。
所述程序包括一条或多条计算机指令,其中,所述一条或多条计算机指令被所述第二处理器41执行时能够实现如下步骤:
确定共享内存中存储的第二指针,所述共享内存为与中央处理器CPU通信连接的外接设备中的内存;
从所述第二指针指向的所述共享内存的第二存储空间中,读取发送进程生成的待处理请求,所述发送进程和所述接收进程运行在不同的所述CPU中;
响应所述待处理请求,以得到请求响应结果,并由所述发送进程获取。
可选地,所述第二处理器41还用于执行前述图8所示实施例中的全部或部分步骤。
其中,所述电子设备的结构中还可以包括第二通信接口43,用于该电子设备与其他设备或通信网络通信。
另外,本发明实施例提供了一种计算机存储介质,用于储存上述电子设备所用的计算机软件指令,其包含用于执行上述图7或图8所示的进程间通信方法所涉及的程序。
最后应说明的是:以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。