CN112114983B - 一种基于共享内存的通信方法、装置和设备 - Google Patents
一种基于共享内存的通信方法、装置和设备 Download PDFInfo
- Publication number
- CN112114983B CN112114983B CN202010962437.9A CN202010962437A CN112114983B CN 112114983 B CN112114983 B CN 112114983B CN 202010962437 A CN202010962437 A CN 202010962437A CN 112114983 B CN112114983 B CN 112114983B
- Authority
- CN
- China
- Prior art keywords
- task
- thread
- management center
- server
- semaphore
- 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.)
- Active
Links
Images
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/54—Interprogram communication
- G06F9/544—Buffers; Shared memory; Pipes
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2209/00—Indexing scheme relating to G06F9/00
- G06F2209/54—Indexing scheme relating to G06F9/54
- G06F2209/548—Queue
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Multi Processors (AREA)
Abstract
本发明涉及一种基于共享内存的通信方法,包括客户端线程将客户端线程信号量写入环形缓冲区,发起连接请求,所述客户端线程通过所述信号量将自身挂起;任务管理中心读取所述环形缓冲区,得到所述客户端线程的连接请求,创建服务端信号量,将所述客户端线程信号量和所述服务端信号量的映射关系保存至映射关系表;任务管理中心通过所述客户端线程信号量,唤醒所述客户端线程。本发明提升客户端和服务端的通信效率。本发明还涉及一种基于共享内存的通信装置和设备。
Description
技术领域
本发明涉及计算机技术领域,尤其涉及一种基于共享内存的通信方法、装置和设备。
背景技术
在一对多的通信模型中,通常客户端和服务端部署在不同的设备上,设备之间通过网线连接,其通信方式只能采用Socket通信。在Socket通信时,由于复杂的网络环境,Socket通信需要组装解析复杂的网络报头、同时对报文进行确认、对数据进行CRC校验等。但当客户端和服务端都部署在同一台设备上,它们之间的通信方式为进程间的通信,进程间的通信是在同一台设备上的内存信息交换,如何建立高效的通信方案是目前需要解决的技术问题。
发明内容
本发明所要解决的技术问题是针对现有技术的不足,提供一种基于共享内存的通信方法、系统和设备。
本发明解决上述技术问题的技术方案如下:
一种基于共享内存的通信方法,包括:
客户端线程将客户端线程信号量写入环形缓冲区,发起连接请求,所述客户端线程通过所述信号量将自身挂起;
任务管理中心读取所述环形缓冲区,得到所述客户端线程的连接请求,创建服务端信号量,将所述客户端线程信号量和所述服务端信号量的映射关系保存至映射关系表;
任务管理中心通过所述客户端线程信号量,唤醒所述客户端线程;
客户端线程将第一写任务信息写入所述环形缓冲区,所述第一写任务中信息中包括所述客户端线程信号量和任务类型,所述客户端线程通过所述客户端线程信号量将自身挂起,任务管理中心读取所述环形缓冲区得到所述第一写任务信息,并将所述第一写任务信息放入任务队列中;
当所述任务管理中心处理所述任务队列得到所述第一写任务信息时,查找空闲缓冲区队列得到空闲缓冲区编号,并将所述空闲缓冲区编号写入所述客户端线程在任务管理中心对应的写队列中,将所述空闲缓冲区编号封装为所述客户端线程持有的信号量集中预设的索引值,根据所述客户端线程信号量将所述客户端唤醒;
所述客户端线程将数据信息写入所述空闲缓冲区编号对应的空闲缓冲区后,向所述环形缓冲区注册第一请求任务,所述任务管理中心从所述环形缓冲区中读取所述第一请求任务信息,将所述第一请求任务信息放入所述任务队列中;
当所述任务管理中心处理所述任务队列获得所述第一请求任务信息时,根据所述客户端线程信号量查找所述映射连接表,获取对应的服务端信号量,并从服务端线程池中获取一个空闲服务线程与所述服务端信号量绑定,将所述空闲缓冲区编号放入所述服务端线程在任务管理中心对应的读队列中,并启动所述服务端线程;
所述服务端线程通过所述任务管理中心和所述空闲缓冲区读取所述数据信息。
本发明的有益效果是:客户端线程和服务端线程通过任务管理中心进行数据信息的交互,提升客户端和服务端的通信效率。
本发明解决上述技术问题的另一种技术方案如下:
一种基于共享内存的通信系统,包括客户端线程、服务端线程和任务管理中心:
所述客户端线程,用于客户端线程将客户端线程信号量写入环形缓冲区,发起连接请求,所述客户端线程通过所述信号量将自身挂起;
所述任务管理中心,用于读取所述环形缓冲区,得到所述客户端线程的连接请求,创建服务端信号量,将所述客户端线程信号量和所述服务端信号量的映射关系保存至映射关系表;
所述任务管理中心,用于通过所述客户端线程信号量,唤醒所述客户端线程;
所述客户端线程,用于将第一写任务信息写入所述环形缓冲区,所述第一写任务中信息中包括所述客户端线程信号量和任务类型,所述客户端线程通过所述客户端线程信号量将自身挂起,任务管理中心读取所述环形缓冲区得到所述第一写任务信息,并将所述第一写任务信息放入任务队列中;
所述任务管理中心,用于当所述任务管理中心处理所述任务队列得到所述第一写任务信息时,查找空闲缓冲区队列得到空闲缓冲区编号,并将所述空闲缓冲区编号写入所述客户端线程在任务管理中心对应的写队列中,将所述空闲缓冲区编号封装为所述客户端线程持有的信号量集中预设的索引值,根据所述客户端线程信号量将所述客户端唤醒;
所述客户端线程,用于将数据信息写入所述空闲缓冲区编号对应的空闲缓冲区后,向所述环形缓冲区注册第一请求任务,所述任务管理中心从所述环形缓冲区中读取所述第一请求任务信息,将所述第一请求任务信息放入所述任务队列中;
所述任务管理中心,用于当所述任务管理中心处理所述任务队列获得所述第一请求任务信息时,根据所述客户端线程信号量查找所述映射连接表,获取对应的服务端信号量,并从服务端线程池中获取一个空闲服务线程与所述服务端信号量绑定,将所述空闲缓冲区编号放入所述服务端线程在任务管理中心对应的读队列中,并启动所述服务端线程;
所述服务端线程,用于通过所述任务管理中心和所述空闲缓冲区读取所述数据信息。
此外,本申请还提供一种计算机设备,包括存储器、处理器及存储在所述存储器上的并可在所述处理器上运行的计算机程序,所述处理器执行所述程序时实现如上述技术方案中任一项所述的基于共享内存的通信方法的步骤。
本发明附加的方面的优点将在下面的描述中部分给出,部分将从下面的描述中变得明显,或通过本发明实践了解到。
附图说明
为了更清楚地说明本发明实施例的技术方案,下面将对本发明实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面所描述的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本发明实施例提供的一种基于共享内存的通信方法的流程示意图图;
图2为本发明另一实施例提供的一种基于共享内存的通信装置的结构图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明的一部分实施例,而不是全部实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动的前提下所获得的所有其他实施例,都应属于本发明保护的范围。
如图1本发明实施例提供的一种基于共享内存的通信方法的流程示意图图所示,一种基于共享内存的通信方法,包括以下步骤:
110、客户端线程将客户端线程信号量写入环形缓冲区,发起连接请求,客户端线程通过信号量将自身挂起。
120、任务管理中心读取所述环形缓冲区,得到客户端线程的连接请求,创建服务端信号量,将客户端线程信号量和服务端信号量的映射关系保存至映射关系表。任务管理中心通过客户端线程信号量,唤醒客户端线程。
130、客户端线程将第一写任务信息写入环形缓冲区,第一写任务中信息中包括客户端线程信号量和任务类型,客户端线程通过客户端线程信号量将自身挂起,任务管理中心读取环形缓冲区得到第一写任务信息,并将第一写任务信息放入任务队列中。
140、当任务管理中心处理任务队列得到第一写任务信息时,查找空闲缓冲区队列得到空闲缓冲区编号,并将空闲缓冲区编号写入客户端线程在任务管理中心对应的写队列中,将空闲缓冲区编号封装为客户端线程持有的信号量集中预设的索引值,根据客户端线程信号量将客户端唤醒。
150、客户端线程将数据信息写入空闲缓冲区编号对应的空闲缓冲区后,向环形缓冲区注册第一请求任务,任务管理中心从环形缓冲区中读取第一请求任务信息,将第一请求任务信息放入任务队列中。
160、当任务管理中心处理任务队列获得第一请求任务信息时,根据客户端线程信号量查找映射连接表,获取对应的服务端信号量,并从服务端线程池中获取一个空闲服务线程与服务端信号量绑定,将空闲缓冲区编号放入服务端线程在任务管理中心对应的读队列中,并启动服务端线程。服务端线程通过任务管理中心和空闲缓冲区读取数据信息。
基于上述实施例提供的一种基于共享内存的通信方法,客户端线程和服务端线程通过任务管理中心进行数据信息的交互,提升客户端和服务端的通信效率。
进一步地,步骤150中具体包括;
所述服务端线程将与所述服务端线程信号量及任务类型写入所述环形缓冲区,注册第一读任务,并通过所述服务端线程信号量将自身挂起;
所述任务管理中心从所述环形缓冲区中读取所述第一读任务信息,将所述第一读任务信息放入所述任务队列中,当所述任务管理中心从所述任务队列中读取到所述第一读任务信息时,将所述空闲缓冲区编号封装为服务端线程绑定的信号量集中预设的索引的值后,根据所述服务端线程信号量将所述服务端线程唤醒;
所述服务端线程读取所述空闲缓冲区中的数据信息,并向所述环形缓冲区中注册第一读完成任务;
所述任务管理中心从所述环形缓冲区中读取所述第一读完成任务信息时,释放对应的缓冲区编号。
进一步地,任务管理中心从所述环形缓冲区中读取所述第一读完成任务信息时,释放对应的缓冲区编号,具体包括:
所述任务管理中心从所述环形缓冲区中读取所述第一读完成任务信息,将所述第一读完成任务信息放入所述任务队列中;
当所述任务管理中心处理所述任务队列时,得到所述读完成任务信息时,将所述缓冲区编号重新放入空闲队列中。
进一步地,服务端线程向环形缓冲区注册第二写任务后,将自身挂起,任务管理中心读取所述环形缓冲区得到所述第二写任务信息,并将所述第二写任务信息放入所述任务队列中;
当所述任务管理中心处理所述任务队列获得所述第二写任务信息时,查找空闲缓冲区队列得到空闲缓冲区编号,并将所述空闲缓冲区编号写入所述服务端线程的写队列中,将所述空闲缓冲区编号封装为服务端线程绑定的信号量集中预设的索引的值后,根据所述服务端线程信号量将所述服务端线程唤醒;
所述服务端线程将数据信息写入所述空闲缓冲区后,向所述环形缓冲区注册第二请求任务,所述任务管理中心从所述环形缓冲区中读取所述第二请求任务信息,并将所述第二请求任务信息放入所述任务队列中;
当所述任务管理中心处理所述任务队列获得所述第二请求任务信息时,查找映射连接表,得到与所述服务端线程对应的客户端线程的信号量,将所述空闲缓冲区编号放入所述客户端线程在任务管理中心对应的读队列中,并根据所述客户端线程信号量唤醒所述客户端线程;
所述客户端线程通过所述任务管理中心和所述空闲缓冲区读取所述数据信息。
进一步地,客户端线程通过所述任务管理中心和所述空闲缓冲区读取所述数据信息,具体包括:
所述客户端线程向所述环形缓冲区中注册第二读任务,并将自身挂起;
所述任务管理中心从所述环形缓冲区中读取所述第二读任务信息,将所述第二读任务信息放入所述任务队列中,当所述任务管理中心从所述任务队列中读取到所述第二读任务信息时,将所述空闲缓冲区编号封装为为客户端线程持有的信号量集中预设的索引的值后,并根据所述客户端信号量将所述客户端线程唤醒;
所述客户端线程读取所述空闲缓冲区中的数据信息。
应理解,当服务端与客户端同时部署在同一设备时,若采用Socket通信时,组装解析网络报头、报文确认和CRC校验时会有不可避免的时间消耗问题,本申请上述实施例中通过全局共享内存实现客户端和服务端的通信,客户端和服务端通过共享内存来传递消息。与Socket通信中的套接字对应的是在基于共享内存进行通信时,通过信号量标识不同客户端和服务端的进程或线程,同时与Socket通信中的路由表对应的是服务端和客户端信号量的映射连接表。
此外,本申请实施例中通过任务管理中心实现对服务端线程池中的线程进行管理和分配。任务管理中心记录着客户端线程和服务端线程之间的映射关系。用于客户端线程或服务端线程向任务管理中心传递消息的环形缓冲区是共享内存的一部分,该缓冲区的读写指针都是无符号char型,由于无符号char型自加到256时溢出,重新归零,此时的环形缓冲区的大小固定为256×环形缓冲区中的数据单元的大小。写指针由所有的客户端线程或者服务端线程池中的线程池中的线程互斥写,而读指针只可由任务管理中心进行读写,对于所有的客户端线程或者服务端的线程池中的线程,该读指针只读。当客户端线程或服务端线程池中的线程发送消息时,首先获取环形缓冲区中写保护锁,然后向环形缓冲区中写入任务信息和自身连接ID并更新写指针,对于一些需要等待任务管理中心处理结果的任务时,在往环形缓冲区中写完信息会将自身挂起。客户端线程和服务端线程的连接ID由其自身持有或绑定的信号量标识。服务端线程查询到环形缓冲区非空状况时,从环形缓冲区取出信息并更新读指针,然后根据该信息进行相应的操作,对于等待任务管理中心处理结果的任务,任务管理中心则通过相应的信号量返回处理结果并唤醒等任务管理中心结果的进程或线程。
共享内存中划分了一块单独的区域用于客户端线程注册连接信息,该区域被称为连接池,也是一块环形缓冲区。客户端线程发起连接时的流程,首先,客户端线程获取连接池的写保护锁,写入连接ID并释放锁,然后将自身挂起,等待任务管理中心处理结果。当任务管理中心返回正确的结果时设置连接标志后,表示连接已经成功建立。
共享内存在任务管理中心初始化时根据特定的key值创建,由服务端的所有进程或线程和客户端的所有进程或线程共享。该共享内存大小固定,按固定大小被分成了一些缓冲区,任务管理中心按照不同的连接请求给不同的连接分配不同数量的缓冲区。全局共享内存被拆分成N个缓冲区,其中,0号缓冲区被拆分成两个环形缓冲区,分别为任务池和连接池,用于接收连接终端的任务请求和连接请求。1~N-1号cache被用于通信用的数据缓冲区。1~N-1号缓冲区根据通信中的不同时刻,可以分为三个状态:空闲、读和写。
在一个通信周期内,客户端线程发起通信请求时,首先向任务管理中心发送写任务消息,任务管理中心向该客户端线程返回一个可写的缓冲区,客户端线程写完所有的信息后,再向任务管理中心发起通信请求。任务管理中心接收到通信请求时,通过查找映射连接表,把客户端线程写完的缓冲区编号挂到服务端的读队列,然后分配给一个空闲的线程处理该通信请求。
连接状态标识的值由客户端初始化为1,在客户端与任务管理中心握手连接时,由任务管理中心对连接状态标识进行P操作,客户端被允许连接后再对连接状态标识进行V操作。连接状态标识的值为1时,表示连接处于正常状态。当客户端异常断开时,操作系统会将该值重置为0。任务管理中心只要周期性地查询连接状态标识的值即可知道客户端的连接状态。
如图2本发明另一实施例提供的一种基于共享内存的通信装置的结构图所示,一种基于共享内存的通信装置,包括客户端线程、服务端线程和任务管理中心:
所述客户端线程,用于客户端线程将客户端线程信号量写入环形缓冲区,发起连接请求,所述客户端线程通过所述信号量将自身挂起;
所述任务管理中心,用于读取所述环形缓冲区,得到所述客户端线程的连接请求,创建服务端信号量,将所述客户端线程信号量和所述服务端信号量的映射关系保存至映射关系表;
所述任务管理中心,用于通过所述客户端线程信号量,唤醒所述客户端线程;
所述客户端线程,用于将第一写任务信息写入所述环形缓冲区,所述第一写任务中信息中包括所述客户端线程信号量和任务类型,所述客户端线程通过所述客户端线程信号量将自身挂起,任务管理中心读取所述环形缓冲区得到所述第一写任务信息,并将所述第一写任务信息放入任务队列中;
所述任务管理中心,用于当所述任务管理中心处理所述任务队列得到所述第一写任务信息时,查找空闲缓冲区队列得到空闲缓冲区编号,并将所述空闲缓冲区编号写入所述客户端线程在任务管理中心对应的写队列中,将所述空闲缓冲区编号封装为所述客户端线程持有的信号量集中预设的索引值,根据所述客户端线程信号量将所述客户端唤醒;
所述客户端线程,用于将数据信息写入所述空闲缓冲区编号对应的空闲缓冲区后,向所述环形缓冲区注册第一请求任务,所述任务管理中心从所述环形缓冲区中读取所述第一请求任务信息,将所述第一请求任务信息放入所述任务队列中;
所述任务管理中心,用于当所述任务管理中心处理所述任务队列获得所述第一请求任务信息时,根据所述客户端线程信号量查找所述映射连接表,获取对应的服务端信号量,并从服务端线程池中获取一个空闲服务线程与所述服务端信号量绑定,将所述空闲缓冲区编号放入所述服务端线程在任务管理中心对应的读队列中,并启动所述服务端线程;
所述服务端线程,用于通过所述任务管理中心和所述空闲缓冲区读取所述数据信息。
进一步地,所述服务端线程,用于将与所述服务端线程信号量及任务类型写入所述环形缓冲区,注册第一读任务,并通过所述服务端线程信号量将自身挂起;
所述任务管理中心,用于从所述环形缓冲区中读取所述第一读任务信息,将所述第一读任务信息放入所述任务队列中,当所述任务管理中心从所述任务队列中读取到所述第一读任务信息时,将所述空闲缓冲区编号封装为服务端线程绑定的信号量集中预设的索引的值后,根据所述服务端线程信号量将所述服务端线程唤醒;
所述服务端线程,用于读取所述空闲缓冲区中的数据信息,并向所述环形缓冲区中注册第一读完成任务;
所述任务管理中心,用于从所述环形缓冲区中读取所述第一读完成任务信息时,释放对应的缓冲区编号。
进一步地,所述任务管理中心,用于从所述环形缓冲区中读取所述第一读完成任务信息,将所述第一读完成任务信息放入所述任务队列中;
当所述任务管理中心处理所述任务队列时,得到所述读完成任务信息时,将所述缓冲区编号重新放入空闲队列中。
本申请还提供一种计算机设备,包括存储器、处理器及存储在所述存储器上的并可在所述处理器上运行的计算机程序,所述处理器执行所述程序时实现如上述技术方案中任一项所述的基于共享内存的通信方法的步骤。
以上,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到各种等效的修改或替换,这些修改或替换都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应以权利要求的保护范围为准。
Claims (9)
1.一种基于共享内存的通信方法,其特征在于,包括:
客户端线程将客户端线程信号量写入环形缓冲区,发起连接请求,所述客户端线程通过所述客户端线程信号量将自身挂起;
任务管理中心读取所述环形缓冲区,得到所述客户端线程的连接请求,创建服务端信号量,将所述客户端线程信号量和所述服务端信号量的映射关系保存至映射关系表;
任务管理中心通过所述客户端线程信号量,唤醒所述客户端线程;
客户端线程将第一写任务信息写入所述环形缓冲区,所述第一写任务信息中包括所述客户端线程信号量和任务类型,所述客户端线程通过所述客户端线程信号量将自身挂起,任务管理中心读取所述环形缓冲区得到所述第一写任务信息,并将所述第一写任务信息放入任务队列中;
当所述任务管理中心处理所述任务队列得到所述第一写任务信息时,查找空闲缓冲区队列得到空闲缓冲区编号,并将所述空闲缓冲区编号写入所述客户端线程在任务管理中心对应的写队列中,将所述空闲缓冲区编号封装为所述客户端线程持有的信号量集中预设的索引值,根据所述客户端线程信号量将所述客户端线程唤醒;
所述客户端线程将数据信息写入所述空闲缓冲区编号对应的空闲缓冲区后,向所述环形缓冲区注册第一请求任务,所述任务管理中心从所述环形缓冲区中读取所述第一请求任务信息,将所述第一请求任务信息放入所述任务队列中;
当所述任务管理中心处理所述任务队列获得所述第一请求任务信息时,根据所述客户端线程信号量查找所述映射关系表,获取对应的服务端信号量,并从服务端线程池中获取一个空闲服务端线程与所述服务端信号量绑定,将所述空闲缓冲区编号放入所述服务端线程在任务管理中心对应的读队列中,并启动所述服务端线程;
所述服务端线程通过所述任务管理中心和所述空闲缓冲区读取所述数据信息。
2.根据权利要求1所述的基于共享内存的通信方法,其特征在于,所述服务端线程通过所述任务管理中心和所述空闲缓冲区读取所述数据信息,具体包括:
所述服务端线程将所述服务端线程信号量及任务类型写入所述环形缓冲区,注册第一读任务,并通过所述服务端信号量将自身挂起;
所述任务管理中心从所述环形缓冲区中读取所述第一读任务信息,将所述第一读任务信息放入所述任务队列中,当所述任务管理中心从所述任务队列中读取到所述第一读任务信息时,将所述空闲缓冲区编号封装为服务端线程绑定的信号量集中预设的索引的值后,根据所述服务端信号量将所述服务端线程唤醒;
所述服务端线程读取所述空闲缓冲区中的数据信息,并向所述环形缓冲区中注册第一读完成任务;
所述任务管理中心从所述环形缓冲区中读取所述第一读完成任务信息时,释放对应的缓冲区编号。
3.根据权利要求2所述的基于共享内存的通信方法,其特征在于,所述任务管理中心从所述环形缓冲区中读取所述第一读完成任务信息时,释放对应的缓冲区编号,具体包括:
所述任务管理中心从所述环形缓冲区中读取所述第一读完成任务信息,将所述第一读完成任务信息放入所述任务队列中;
当所述任务管理中心处理所述任务队列时,得到所述第一读完成任务信息时,将所述缓冲区编号重新放入空闲队列中。
4.根据权利要求1所述的基于共享内存的通信方法,其特征在于,所述方法还包括:
服务端线程向环形缓冲区注册第二写任务后,将自身挂起,任务管理中心读取所述环形缓冲区得到所述第二写任务信息,并将所述第二写任务信息放入所述任务队列中;
当所述任务管理中心处理所述任务队列获得所述第二写任务信息时,查找空闲缓冲区队列得到空闲缓冲区编号,并将所述空闲缓冲区编号写入所述服务端线程的写队列中,将所述空闲缓冲区编号封装为服务端线程绑定的信号量集中预设的索引的值后,根据所述服务端信号量将所述服务端线程唤醒;
所述服务端线程将数据信息写入所述空闲缓冲区后,向所述环形缓冲区注册第二请求任务,所述任务管理中心从所述环形缓冲区中读取所述第二请求任务信息,并将所述第二请求任务信息放入所述任务队列中;
当所述任务管理中心处理所述任务队列获得所述第二请求任务信息时,查找映射连接表,得到与所述服务端线程对应的客户端线程的信号量,将所述空闲缓冲区编号放入所述客户端线程在任务管理中心对应的读队列中,并根据所述客户端线程信号量唤醒所述客户端线程;
所述客户端线程通过所述任务管理中心和所述空闲缓冲区读取所述数据信息。
5.根据权利要求4所述的基于共享内存的通信方法,其特征在于,所述客户端线程通过所述任务管理中心和所述空闲缓冲区读取所述数据信息,具体包括:
所述客户端线程向所述环形缓冲区中注册第二读任务,并将自身挂起;
所述任务管理中心从所述环形缓冲区中读取所述第二读任务信息,将所述第二读任务信息放入所述任务队列中,当所述任务管理中心从所述任务队列中读取到所述第二读任务信息时,将所述空闲缓冲区编号封装为为客户端线程持有的信号量集中预设的索引的值后,并根据所述客户端线程信号量将所述客户端线程唤醒;
所述客户端线程读取所述空闲缓冲区中的数据信息。
6.一种基于共享内存的通信装置,其特征在于,包括客户端线程、服务端线程和任务管理中心:
所述客户端线程,用于客户端线程将客户端线程信号量写入环形缓冲区,发起连接请求,所述客户端线程通过所述客户端线程信号量将自身挂起;
所述任务管理中心,用于读取所述环形缓冲区,得到所述客户端线程的连接请求,创建服务端信号量,将所述客户端线程信号量和所述服务端信号量的映射关系保存至映射关系表;
所述任务管理中心,用于通过所述客户端线程信号量,唤醒所述客户端线程;
所述客户端线程,用于将第一写任务信息写入所述环形缓冲区,所述第一写任务信息中包括所述客户端线程信号量和任务类型,所述客户端线程通过所述客户端线程信号量将自身挂起,任务管理中心读取所述环形缓冲区得到所述第一写任务信息,并将所述第一写任务信息放入任务队列中;
所述任务管理中心,用于当所述任务管理中心处理所述任务队列得到所述第一写任务信息时,查找空闲缓冲区队列得到空闲缓冲区编号,并将所述空闲缓冲区编号写入所述客户端线程在任务管理中心对应的写队列中,将所述空闲缓冲区编号封装为所述客户端线程持有的信号量集中预设的索引值,根据所述客户端线程信号量将所述客户端线程唤醒;
所述客户端线程,用于将数据信息写入所述空闲缓冲区编号对应的空闲缓冲区后,向所述环形缓冲区注册第一请求任务,所述任务管理中心从所述环形缓冲区中读取所述第一请求任务信息,将所述第一请求任务信息放入所述任务队列中;
所述任务管理中心,用于当所述任务管理中心处理所述任务队列获得所述第一请求任务信息时,根据所述客户端线程信号量查找所述映射关系表,获取对应的服务端信号量,并从服务端线程池中获取一个空闲服务端线程与所述服务端信号量绑定,将所述空闲缓冲区编号放入所述服务端线程在任务管理中心对应的读队列中,并启动所述服务端线程;
所述服务端线程,用于通过所述任务管理中心和所述空闲缓冲区读取所述数据信息。
7.根据权利要求6所述的基于共享内存的通信装置,其特征在于,
所述服务端线程,用于将所述服务端信号量及任务类型写入所述环形缓冲区,注册第一读任务,并通过所述服务端信号量将自身挂起;
所述任务管理中心,用于从所述环形缓冲区中读取所述第一读任务信息,将所述第一读任务信息放入所述任务队列中,当所述任务管理中心从所述任务队列中读取到所述第一读任务信息时,将所述空闲缓冲区编号封装为服务端线程绑定的信号量集中预设的索引的值后,根据所述服务端信号量将所述服务端线程唤醒;
所述服务端线程,用于读取所述空闲缓冲区中的数据信息,并向所述环形缓冲区中注册第一读完成任务;
所述任务管理中心,用于从所述环形缓冲区中读取所述第一读完成任务信息时,释放对应的缓冲区编号。
8.根据权利要求7所述的基于共享内存的通信装置,其特征在于,
所述任务管理中心,用于从所述环形缓冲区中读取所述第一读完成任务信息,将所述第一读完成任务信息放入所述任务队列中;
当所述任务管理中心处理所述任务队列时,得到所述第一读完成任务信息时,将所述缓冲区编号重新放入空闲队列中。
9.一种计算机设备,其特征在于,包括处理器和存储器;所述存储器,用于存储计算机程序;所述处理器,用于执行所述存储器上所存储的计算机程序,实现权利要求1-5中任一项所述的基于共享内存的通信方法步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010962437.9A CN112114983B (zh) | 2020-09-14 | 2020-09-14 | 一种基于共享内存的通信方法、装置和设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010962437.9A CN112114983B (zh) | 2020-09-14 | 2020-09-14 | 一种基于共享内存的通信方法、装置和设备 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN112114983A CN112114983A (zh) | 2020-12-22 |
CN112114983B true CN112114983B (zh) | 2022-04-19 |
Family
ID=73802588
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010962437.9A Active CN112114983B (zh) | 2020-09-14 | 2020-09-14 | 一种基于共享内存的通信方法、装置和设备 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN112114983B (zh) |
Families Citing this family (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114003413B (zh) * | 2021-12-30 | 2022-04-26 | 深圳佑驾创新科技有限公司 | 一种ipc数据通信方法、装置、设备及介质 |
CN116881026B (zh) * | 2023-09-06 | 2023-11-21 | 成都谐盈科技有限公司 | 一种基于corba中间件的共享内存传输系统及方法 |
Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5434975A (en) * | 1992-09-24 | 1995-07-18 | At&T Corp. | System for interconnecting a synchronous path having semaphores and an asynchronous path having message queuing for interprocess communications |
US5617570A (en) * | 1993-11-03 | 1997-04-01 | Wang Laboratories, Inc. | Server for executing client operation calls, having a dispatcher, worker tasks, dispatcher shared memory area and worker control block with a task memory for each worker task and dispatcher/worker task semaphore communication |
CN104346229A (zh) * | 2014-11-14 | 2015-02-11 | 国家电网公司 | 一种用于嵌入式操作系统进程间通讯优化的处理方法 |
CN105426258A (zh) * | 2014-09-15 | 2016-03-23 | 通用电气航空系统有限责任公司 | 在客户端与服务器之间通信的机制和方法 |
CN107491355A (zh) * | 2017-08-17 | 2017-12-19 | 山东浪潮商用系统有限公司 | 一种基于共享内存的进程间功能调用方法及装置 |
CN111176831A (zh) * | 2019-12-05 | 2020-05-19 | 西安交通大学 | 基于多线程共享内存通信的动态线程映射优化方法及装置 |
CN111427707A (zh) * | 2020-03-25 | 2020-07-17 | 北京左江科技股份有限公司 | 一种基于共享内存池的ipc通信方法 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US10223032B2 (en) * | 2017-04-28 | 2019-03-05 | International Business Machines Corporation | Queue control for shared memory access |
-
2020
- 2020-09-14 CN CN202010962437.9A patent/CN112114983B/zh active Active
Patent Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5434975A (en) * | 1992-09-24 | 1995-07-18 | At&T Corp. | System for interconnecting a synchronous path having semaphores and an asynchronous path having message queuing for interprocess communications |
US5617570A (en) * | 1993-11-03 | 1997-04-01 | Wang Laboratories, Inc. | Server for executing client operation calls, having a dispatcher, worker tasks, dispatcher shared memory area and worker control block with a task memory for each worker task and dispatcher/worker task semaphore communication |
CN105426258A (zh) * | 2014-09-15 | 2016-03-23 | 通用电气航空系统有限责任公司 | 在客户端与服务器之间通信的机制和方法 |
CN104346229A (zh) * | 2014-11-14 | 2015-02-11 | 国家电网公司 | 一种用于嵌入式操作系统进程间通讯优化的处理方法 |
CN107491355A (zh) * | 2017-08-17 | 2017-12-19 | 山东浪潮商用系统有限公司 | 一种基于共享内存的进程间功能调用方法及装置 |
CN111176831A (zh) * | 2019-12-05 | 2020-05-19 | 西安交通大学 | 基于多线程共享内存通信的动态线程映射优化方法及装置 |
CN111427707A (zh) * | 2020-03-25 | 2020-07-17 | 北京左江科技股份有限公司 | 一种基于共享内存池的ipc通信方法 |
Non-Patent Citations (2)
Title |
---|
Linux下进程间通信机制的探讨;许豪 等;《科技与创新》;20160331(第3期);第83页 * |
Message-Passing Interprocess Communication Design in seL4;Zhoujian Yu等;《2016 5th International Conference on Computer Science and Network Technology (ICCSNT)》;20161231;第418-422页 * |
Also Published As
Publication number | Publication date |
---|---|
CN112114983A (zh) | 2020-12-22 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
KR100625595B1 (ko) | 트랜잭션 처리 시스템의 병렬 로깅 방법 및 트랜잭션 로그 처리 시스템 | |
US5924097A (en) | Balanced input/output task management for use in multiprocessor transaction processing system | |
US20090300017A1 (en) | Transaction Parallel Control Method, and Database Managemet System | |
US20030005417A1 (en) | Debugger for a hardware-implemented operating system | |
US9529651B2 (en) | Apparatus and method for executing agent | |
CN112114983B (zh) | 一种基于共享内存的通信方法、装置和设备 | |
CN105630731A (zh) | 一种多cpu环境下网卡数据处理方法和装置 | |
CN111078436B (zh) | 数据处理的方法、装置、设备及存储介质 | |
CN110196759B (zh) | 分布式事务处理方法和装置、存储介质及电子装置 | |
CN112256414A (zh) | 一种连接多种计算存储引擎的方法及系统 | |
CN109842621A (zh) | 一种减少token存储数量的方法及终端 | |
CN105373563B (zh) | 数据库切换方法及装置 | |
CN112130976A (zh) | 一种基于rest的多引擎大数据任务管理方法 | |
CN104657115B (zh) | 一种集群文件系统客户端多核并发负载实现方法 | |
CN109597697B (zh) | 一种资源撮合处理方法及装置 | |
CN110706148A (zh) | 人脸图像处理方法、装置、设备和存储介质 | |
CN109976881B (zh) | 事务识别方法和装置、存储介质以及电子装置 | |
JPH06348512A (ja) | 資源管理コンピュータ・システム | |
CN107102901B (zh) | 一种任务处理方法和装置 | |
CN113641472A (zh) | 分布式应用的异转同实现方法及装置 | |
JP2010186450A (ja) | Icカードシステム、そのサーバ装置、プログラム | |
CN113296972A (zh) | 一种信息的注册方法、计算设备及存储介质 | |
CN111343101A (zh) | 服务器限流方法、装置、电子设备及可读存储介质 | |
CN116185670B (zh) | 内存间的数据交换方法、装置、电子设备及存储介质 | |
CN117742998B (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 | ||
CB03 | Change of inventor or designer information | ||
CB03 | Change of inventor or designer information |
Inventor after: Guo Meiqin Inventor after: Hao Bin Inventor after: Wang Min Inventor before: Wang Min Inventor before: Hao Bin Inventor before: Lu Yingying |
|
GR01 | Patent grant | ||
GR01 | Patent grant |