本申请涉及通讯,特别是涉及一种单线程多消息订阅的进程间消息通讯方法、装置、计算机设备和存储介质。
背景技术:
1、在大型应用程序设计中,经常采用分布式设计方案。即把大型应用程序分割成多个独立的小应用(也叫结点),每个小应用(结点)是个独立的进程,负责完成某一部分应用逻辑。多个应用通过进程间通讯的方法完成互相之间的消息传递,通过互相协作共同完成一个大型复杂的应用逻辑。
2、传统的通讯方式为:发布者在发布消息之后,发布者将消息拷贝到缓冲区存放,当订阅者需要订阅消息时,将发布者的缓冲区存放的消息拷贝到自身的缓冲区中,然后再拷贝到用户空间,供用户使用。但是,这种通讯方法存在多次拷贝问题,尤其当消息数据量大时,需要大量时间来拷贝数据,通讯效率低。此外传统通讯方式还存在单个线程只能一次订阅一个类型的消息,无法同时订阅多个类型消息的问题。
技术实现思路
1、基于此,有必要针对上述技术问题,提供一种单线程多消息订阅的进程间消息通讯方法、装置、计算机设备和存储介质。
2、第一方面,本申请提供了一种单线程多消息订阅的进程间消息通讯方法,所述方法包括:
3、响应于发布线程的消息发布指令,
4、从发布线程的第一内存块的第一缓冲区中租用消息缓存块;
5、返回租用的所述消息缓存块的指针给上层应用,由上层应用将发布的消息填充至所述消息缓存块中;
6、根据所述消息缓存块的指针,归还所述消息缓存块;
7、对所述消息缓存块的消息进行映射得到消息小体;
8、将所述消息小体拷贝至订阅所述发布线程的订阅线程的第二内存块的第二缓冲区,唤醒所述订阅线程,以使所述订阅线线程从所述第二缓冲区中获得所述消息小体,根据所述消息小体解析得到所述消息缓存块的消息,并租用所述第一缓冲区的所述消息缓存块,将所述消息缓存块的指针返回给上层应用,由上层应用根据所述消息缓存块的指针访问所述消息缓存块,获得发布线程发布的消息。
9、第二方面,本申请还提供了一种单线程多消息订阅的进程间消息通讯方法,所述方法包括:
10、读取第二内存块的第二缓冲区,当所述第二缓冲区中至少有一个新增消息小体时,订阅线程被发布线程唤醒;
11、根据所述消息小体解析得到发布线程的第一内存块的第一缓冲区的消息缓存块的消息;其中,订阅的发布线程的发布消息存储在所述消息缓存块中;
12、租用所述第一内存块的第一缓冲区的所述消息缓存块,将所述消息缓存块的指针返回给上层应用,由上层应用根据所述消息缓存块的指针访问所述消息缓存块获得发布线程发布的消息。
13、第三方面,本申请还提供了一种单线程多消息订阅的进程间消息通讯装置。所述装置包括:
14、消息发布模块,用于响应于发布线程的消息发布指令;
15、缓存租用模块,用于从发布线程的第一内存块的第一缓冲区中租用消息缓存块;
16、填充模块,用于返回租用的所述消息缓存块的指针给上层应用,由上层应用将发布的消息填充至所述消息缓存块中;
17、归还模块,用于根据所述消息缓存块的指针,归还所述消息缓存块;
18、映射模块,用于对所述消息缓存块的消息进行映射得到消息小体;
19、数据处理模块,用于将所述消息小体拷贝至订阅所述发布线程的订阅线程的第二内存块的第二缓冲区,唤醒所述订阅线程,以使所述订阅线线程从所述第二缓冲区中获得所述消息小体,根据所述消息小体解析得到所述消息缓存块的消息,并租用所述第一缓冲区的所述消息缓存块,将所述消息缓存块的指针返回给上层应用,由上层应用根据所述消息缓存块的指针访问所述消息缓存块,获得发布线程发布的消息。
20、第四方面,本申请还提供了一种单线程多消息订阅的进程间消息通讯装置。所述装置包括:
21、线程唤醒模块,用于读取第二内存块的第二缓冲区,当所述第二缓冲区中至少有一个新增消息小体时,订阅线程被发布线程唤醒;
22、解析模块,用于根据所述消息小体解析得到发布线程的第一内存块的第一缓冲区的消息缓存块的消息;其中,订阅的发布线程的发布消息存储在所述消息缓存块中;
23、处理模块,用于租用所述第一内存块的第一缓冲区的所述消息缓存块,将所述消息缓存块的指针返回给上层应用,由上层应用根据所述消息缓存块的指针访问所述消息缓存块获得发布线程发布的消息。
24、第五方面,本申请还提供了一种计算机设备。所述计算机设备包括存储器和处理器,所述存储器存储有计算机程序,所述处理器执行所述计算机程序时实现单线程多消息订阅的进程间消息通讯方法的步骤。
25、第六方面,本申请还提供了一种计算机可读存储介质。所述计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现单线程多消息订阅的进程间消息通讯方法的步骤。
26、上述单线程多消息订阅的进程间消息通讯方法、装置、计算机设备和存储介质,首先响应于发布线程的消息发布指令,从发布线程的第一内存块的第一缓冲区中租用消息缓存块,返回租用的消息缓存块的指针给上层应用,由上层应用将发布的消息填充至消息缓存块中,发布线程根据消息缓存块的指针,归还消息缓存块,对消息缓存块的消息进行映射得到消息小体,将消息小体拷贝至订阅发布线程的订阅线程的第二内存块的第二缓冲区,唤醒订阅线程,以使订阅线线程从第二缓冲区中获得消息小体,订阅线程根据消息小体解析得到消息缓存块的消息,并租用第一缓冲区的消息缓存块,将消息缓存块的指针返回给上层应用,由上层应用根据消息缓存块的指针访问消息缓存块,获得发布线程发布的消息。由此,单个订阅线程可以订阅多种类型的消息。此外,当需要发布消息时,通过租用消息缓存块、填充消息和归还消息缓存块的方式,发布线程只需将消息小体发布给订阅了该消息的订阅线程,少了数据拷贝过程,可用于大容量的数据传输,可以提高通讯速度。
1.一种单线程多消息订阅的进程间消息通讯方法,其特征在于,所述方法包括:
2.根据权利要求1所述的方法,其特征在于,所述从发布线程的第一内存块的第一缓冲区中租用消息缓存块,包括:
3.根据权利要求2所述的方法,其特征在于,所述根据所述消息缓存块的指针,归还所述消息缓存块,包括:
4.根据权利要求2所述的方法,其特征在于,对所述消息缓存块的信息进行映射得到消息小体,包括:
5.根据权利要求2所述的方法,其特征在于,所述将所述消息小体拷贝至订阅所述发布线程的订阅线程的第二内存块的第二缓冲区,包括:
6.根据权利要求1所述的方法,其特征在于,所述第一内存块是所述发布线程注册时,在共享内存中为所述发布线程分配的内存空间,所述第二内存块是所述订阅线程注册时,在所述共享内存中为所述订阅线程分配的内存空间。
7.根据权利要求6所述的方法,其特征在于,所述方法还包括:
8.一种单线程多消息订阅的进程间消息通讯方法,其特征在于,所述方法包括:
9.根据权利要求8所述的方法,其特征在于,所述租用第一缓冲区的所述消息缓存块,将所述消息缓存块的指针返回给上层应用之前,所述方法还包括:
10.根据权利要求8所述的方法,其特征在于,所述方法还包括:
11.一种单线程多消息订阅的进程间消息通讯装置,其特征在于,所述装置包括:
12.一种单线程多消息订阅的进程间消息通讯装置,其特征在于,所述装置包括:
13.一种计算机设备,包括存储器和处理器,所述存储器存储有计算机程序,其特征在于,所述处理器执行所述计算机程序时实现权利要求1至10中任一项所述的方法的步骤。
14.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现权利要求1至10中任一项所述的方法的步骤。