线程消息处理方法及相关产品与流程

文档序号:24500973发布日期:2021-03-30 21:30阅读:75来源:国知局
线程消息处理方法及相关产品与流程
本申请涉及内核通信
技术领域
,具体涉及一种线程消息处理方法及相关产品。
背景技术
:在片上系统(systemonchip,soc)上运行实时多任务操作系统(realtimeoperatingsystem,rtos)时,应用的各个线程任务都有通信的需求,由于soc的可用资源有限,例如计算能力、存储均会受到严格限制,一般直接使用内核提供的消息队列来实现线程的消息读取。技术实现要素:本申请实施例提供了一种线程消息处理方法及相关产品,可以支持订阅线程同时订阅多个消息总线。第一方面,本申请实施例提供了一种线程消息处理方法,应用于电子设备,所述电子设备包括第一消息订阅者线程订阅的多个主题的多个消息总线、就绪线程队列以及与所述多个消息总线一一对应的多个等待线程队列,所述方法包括:获取所述就绪线程队列中当前需要处理的所述第一消息订阅者线程;检测所述多个消息总线中是否存在所述第一消息订阅者线程的消息;若是,则调用所述第一消息订阅者线程读取检测到的消息;若否,则移除所述就绪队列中的所述第一消息订阅者线程,并在所述多个等待线程队列的每个等待线程队列插入所述第一消息订阅者线程。第二方面,本申请实施例提供了一种线程消息处理装置,应用于电子设备,所述电子设备包括第一消息订阅者线程订阅的多个主题的多个消息总线、就绪线程队列以及与所述多个消息总线一一对应的多个等待线程队列,所述装置包括处理单元和通信单元,其中,所述处理单元,用于通过所述通信单元获取就绪线程队列中当前需要处理的第一消息订阅者线程;以及用于检测所述多个消息总线中是否存在所述第一消息订阅者线程的消息;若是,则调用所述第一消息订阅者线程读取检测到的消息;若否,则移除所述就绪队列中的所述第一消息订阅者线程,并在所述多个等待线程队列的每个等待线程队列插入所述第一消息订阅者线程。第三方面,本申请实施例提供了一种电子设备,包括:处理器,存储器,以及一个或多个程序;所述一个或多个程序被存储在上述存储器中,并且被配置成由所述处理器执行,所述程序包括用于执行本申请实施例第一方面任一方法中所描述的步骤的指令。第四方面,本申请实施例提供了一种计算机可读存储介质,其中,所述计算机可读存储介质存储有用于电子数据交换的计算机程序,该计算机程序具体包括指令,所述指令用于执行如本申请实施例第一方面任一方法中所描述的部分或全部步骤。可以看出,本申请实施例中,电子设备包括第一消息订阅者线程订阅的多个主题的多个消息总线、就绪线程队列以及与多个消息总线一一对应的多个等待线程队列,在该消息总线架构下,电子设备首先获取就绪线程队列中当前需要处理的第一消息订阅者线程,其次,检测多个消息总线中是否存在第一消息订阅者线程的消息;若是,则调用第一消息订阅者线程读取检测到的消息;若否,则移除就绪队列中的第一消息订阅者线程,并在多个等待线程队列的每个等待线程队列插入第一消息订阅者线程。可见,由于就绪线程队列中的线程在无消息可收取状态下会被及时移除,并转入等待线程队列,从而避免因为一个消息总线的空闲阻塞其它消息总线的消息处理,保证任意一个消息总线上插入第一消息订阅者线程的消息均能够被及时查收,实现同时订阅多个fffo首次匹配首次出来类型的消息总线,提高多主题订阅场景中线程消息传输的连续性和稳定性。附图说明为了更清楚地说明本申请实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。图1a是本申请实施例公开的一种消息队列的示意图;图1b是本申请实施例公开的一种消息总线的示意图;图1c是本申请实施例公开的一种基于fffo的消息总线的架构示意图;图2a是本申请实施例公开的一种线程任务通信系统的示意图;图2b是本申请实施例公开的一种支持多主题的消息总线的架构示意图;图2c是本申请实施例公开的一种支持多主题的消息总线的消息处理示意图;图3是本申请实施例公开的一种线程消息处理方法的流程示意图;图4是本申请实施例公开的一种电子设备的结构示意图;图5是本申请实施例公开的一种线程消息处理装置的功能单元组成框图。具体实施方式为了使本
技术领域
的人员更好地理解本申请方案,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。本申请的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别不同对象,而不是用于描述特定顺序。此外,术语“包括”和“具有”以及它们任何变形,意图在于覆盖不排他的包含。例如包含了一系列步骤或单元的过程、方法、系统、产品或设备没有限定于已列出的步骤或单元,而是可选地还包括没有列出的步骤或单元,或可选地还包括对于这些过程、方法、产品或设备固有的其他步骤或单元。在本文中提及“实施例”意味着,结合实施例描述的特定特征、结构或特性可以包含在本申请的至少一个实施例中。在说明书中的各个位置出现该短语并不一定均是指相同的实施例,也不是与其它实施例互斥的独立的或备选的实施例。本领域技术人员显式地和隐式地理解的是,本文所描述的实施例可以与其它实施例相结合。电子设备可以包括各种具有无线通信功能的手持设备、车载设备、可穿戴设备(例如智能手表、智能手环、计步器等)、计算设备或连接到无线调制解调器的其他处理设备,以及各种形式的用户设备(userequipment,ue),移动台(mobilestation,ms),终端设备(terminaldevice)等等。为方便描述,上面提到的设备统称为电子设备。下面对本申请实施例进行详细介绍。电子设备上运行的rtos所支持的消息队列一般有两种使用方式:消息队列与消息总线。图1a是消息队列的示意图,一个消息队列从一个应用接收消息,然后一个或多个其它应用可从该消息队列中以首次进入首次出来(firstinfirstout,fifo)方式读取消息。在很多架构场景中,如果应用a需要发送消息给应用b和c,系统会为b和c各自创建一个消息队列。a会往这些消息队列里发送消息来实现与b和c通信目的。当a发送消息时,b和c可以做其它事情,无需实时接收。这种架构的最大特点是消息队列与线程任务是一一映射的关系。图1b是消息总线的示意图:消息总线也提供了一种机制用于线程任务间的通信,采用的是发布/订阅设计模式。消息订阅线程无需知道具体的消息发布线程,只要总线上有数据,订阅线程就可以获取消息,而且消息总线不会保证订阅者以fifo的顺序去读取。对于消息队列,扩展性比较差,当系统新增线程任务时,也需要相应增加消息队列,而且往新增消息队列里写入消息时,还需要改动消息发送端的代码。虽然消息总线可以增加扩展性,但消息订阅线程基本上是以随机无序的方式从总线读取数据,这在特定的应用场合会给程序设计带来麻烦,例如希望队列里的某个消息发送给指定线程任务。对于消息总线,如图1c提供的一种基于首次匹配首次出来(firstfitfirstout,fffo)的消息总线类型,消息的发布者可指定将消息发送给特定的订阅线程(如图示第一线程),发布者将消息插入到消息总线上(如图示第一消息),内核遍历该消息总线对应的等待线程队列,若找到符合的等待线程,就将该线程插入到就绪队列里;若没有找到就直接返回;当就绪队列中的订阅线程完成了其它任务,就开始遍历消息总线,若找到要发送给自己的消息,就从消息总线上读取该消息,没有找到就将自己从就绪队列移除,插入到该消息总线对应的等待队列。目前基于fff0的消息总线模型仅支持一个主题的订阅,没有考虑订阅线程同时订阅多个主题的情形,当一个订阅者在等待一个主题的消息导致挂起时,就无法再接收其它主题的消息。针对上述问题,本申请实施例提供了一种线程消息处理方法,请参阅图2a,图2a是本申请实施例提供了一种线程消息处理方法的流程示意图,应用于电子设备,所述电子设备包括第一消息订阅者线程订阅的多个主题的多个消息总线、就绪线程队列以及与所述多个消息总线一一对应的多个等待线程队列,如图所示,本线程消息处理方法包括:s201,获取所述就绪线程队列中当前需要处理的所述第一消息订阅者线程。如图2b所示的支持多主题的消息总线的架构示意图,假设第一消息订阅者线程订阅主题0和主题1,则对应的线程消息处理软件架构中,主题0对应消息总线0,消息总线0对应等待线程队列0,主题1对应消息总线1,消息总线1对应等待线程队列1,每个消息总线与对应的等待线程队列通信连接,就绪线程队列与多个消息总线通信连接,且就绪线程队列还与多个等待线程队列通信连接。其中,所述就绪线程队列用于存放处于等待执行消息获取操作中的订阅者线程,主题可以根据消息来源或者消息类型进行区分,如传感器主题对应来自于各类传感器的消息。s202,检测所述多个消息总线中是否存在所述第一消息订阅者线程的消息;若是,则执行步骤s203,若否,则执行步骤s204。s203,调用所述第一消息订阅者线程读取检测到的消息。其中,由于存在多个消息总线,因此该检测到的消息可以位于多个消息总线中的一个或多个消息总线,需要将包含对应消息的每个消息总线中的消息均读取。s204,移除所述就绪队列中的所述第一消息订阅者线程,并在所述多个等待线程队列的每个等待线程队列插入所述第一消息订阅者线程。其中,通过执行上述步骤s202、s203、s204,所述第一消息订阅者线程读取完成本次所有的消息后,转入多个等待队列中进入消息等待状态。可以看出,本申请实施例中,电子设备包括第一消息订阅者线程订阅的多个主题的多个消息总线、就绪线程队列以及与多个消息总线一一对应的多个等待线程队列,在该消息总线架构下,电子设备首先获取就绪线程队列中当前需要处理的第一消息订阅者线程,其次,检测多个消息总线中是否存在第一消息订阅者线程的消息;若是,则调用第一消息订阅者线程读取检测到的消息;若否,则移除就绪队列中的第一消息订阅者线程,并在多个等待线程队列的每个等待线程队列插入第一消息订阅者线程。可见,由于就绪线程队列中的线程在无消息可收取状态下会被及时移除,并转入等待线程队列,从而避免因为一个消息总线的空闲阻塞其它消息总线的消息处理,保证任意一个消息总线上插入第一消息订阅者线程的消息均能够被及时查收,实现同时订阅多个fffo首次匹配首次出来类型的消息总线,提高多主题订阅场景中线程消息传输的连续性和稳定性。在一个可能的示例中,所述检测所述多个消息总线中是否存在所述第一消息订阅者线程的消息,包括:遍历所述多个消息总线中的每个消息总线,确定是否存在所述第一消息订阅者线程的消息。具体实现中,电子设备可以确定第一消息订阅者线程的目标标识信息,并查询消息总线中的每个消息的参考标识信息是否与目标标识信息匹配,若匹配,则确定检测到。可见,本示例中,电子设备能够通过遍历方式查询出第一消息订阅者线程的所有消息,避免遗漏,提高消息查询的全面性和准确度。在本可能的示例中,所述调用所述第一消息订阅者线程读取检测到的消息,包括:确定通过遍历查询到的所述第一消息订阅者线程的未读取的所有消息;调用所述第一消息订阅者线程读取所述所有消息。具体实现中,电子设备可以在查询到消息的同时进行消息读取,即消息查询和消息读取操作可以并行执行,或者,电子设备先查询到所有的消息,然后再执行消息读取,此处不做唯一限定。可见,本示例中,电子设备针对遍历出来的第一消息订阅者线程的所有未读取的消息,通过调用第一消息订阅者线程读取所述所有消息,从而及时完成该第一消息订阅者线程关联的业务功能,提高消息读取的全面性和准确度。在一个可能的示例中,所述检测所述多个消息总线中是否存在所述第一消息订阅者线程的消息,包括:获取所述第一消息订阅者线程订阅的所述多个主题的多个消息链表,所述多个主题与所述多个消息链表一一对应,消息链表用于存储对应的主题的消息总线中插入的所述第一消息订阅者线程的未被读取的消息;检测所述多个消息链表中是否存在所述第一消息订阅者线程的消息。其中,所述消息链表用于存储当前的消息总线中插入的第一消息订阅者线程的所有未读取的消息,若当前消息总线中未插入任何消息,则消息链表为空,对应查询结果为不存在。具体实现中,电子设备的软件系统中可以设置专门用于维护该消息链表的线程控制块,或者赋予原有的线程控制块具备维护对应的主题的消息链表的能力,此处不做唯一限定。可见,本示例中,电子设备通过消息链表来快速检测每个消息中心的第一消息订阅者线程的消息,无需遍历所有消息,耗时更短,效率更高,实时性更强。在本可能的示例中,所述调用所述第一消息订阅者线程读取检测到的消息,包括:获取检测到的消息所属的目标消息链表;读取所述目标消息链表中的所有消息。其中,目标消息链表中可以按照插入消息的先后时序依次排列有第一消息订阅者线程的多个消息。可见,本示例中,电子设备能够通过消息链表的方式快速读取第一消息订阅者线程的所有未读取的消息,方便快捷,避免遗漏。在一个可能的示例中,所述获取所述就绪线程队列中当前需要处理的第一消息订阅者线程之前,所述方法还包括:接收发布者发布的所述第一消息订阅者线程的消息;在所述消息对应的消息总线中插入所述消息;移除所述多个等待线程队列中的所述第一消息订阅者线程,并在所述就绪线程队列中插入所述第一消息订阅者线程。其中,所述电子设备可以根据插入的消息的标识信息确定该消息对应第一消息订阅者线程,该标识信息可以是线程名称等,此处不做唯一限定。具体实现中,所述移除所述多个等待线程队列中的所述第一消息订阅者线程,包括:遍历所述多个等待线程队列中的每个等待线程队列,将查询到的第一消息订阅者线程移除。可见,本示例中,电子设备在检测到消息总线插入第一消息订阅者线程的消息时,会将等待线程队列中包含的该第一消息订阅者线程移除,并在就绪线程队列中插入第一消息订阅者线程,从而实现唤醒第一消息订阅者线程排队进行消息读取操作,此种机制实现了任意一个消息总线中插入消息时,均能够及时切换线程状态实现消息读取,提高多主题场景中消息读取的灵活性。在一个可能的示例中,等待线程队列以哈希表的形式描述消息订阅者线程的名字与地址,所述哈希表包括线程名字字段和线程控制块的地址之间的对应关系;所述移除所述多个等待线程队列中的所述第一消息订阅者线程,包括:针对所述多个等待线程队列中的每个等待线程队列,执行如下操作:以所述第一消息订阅者线程的线程名字字段为查询标识,查询当前处理的等待线程队列的哈希表,获取所述第一消息订阅者线程的线程控制块的地址;根据所述第一消息订阅者线程的线程控制块的地址,将所述第一消息订阅者线程的线程控制块从所述当前处理的等待线程队列移除。其中,线程名字字段和线程控制块的地址之间的对应关系如表1示例所示,表1线程名字字段主题线程控制块的地址线程0主题0地址0线程0主题1地址1………………可见,本示例中,由于使用哈希表的方式能够显著加快匹配过程,从而降低查询时延,提高线程状态切换效率。在一个可能的示例中,所述接收发布者发布的所述第一消息订阅者线程的消息之前,所述方法还包括:在检测到所述第一消息订阅者线程针对所述多个主题的订阅请求时,在所述多个等待线程队列的每个等待线程队列中插入所述第一消息订阅者线程。其中,所述多个等待线程队列可以是提前创建的,或者根据订阅请求实时创建的,此处不做唯一限定。可见,本示例中,电子设备通过订阅请求能够将第一消息订阅者线程准确实时接入到对应的多个等待线程队列中,保证订阅消息无遗漏,提高消息订阅成功率。下面结合示例对本申请的线程消息实现机制进行进一步说明,如图2c所示,假设消息订阅者线程2同时订阅了两个主题,分别为主题0和主题1,分别对应消息总线0和消息总线1,因此消息订阅者线程2位于两个消息总线的等待队列里(等待线程队列0和等待线程队列1),当消息发布者0往消息总线0里插入消息2时,就会去遍历等待线程队列0和等待线程队列1,并将消息订阅者线程2从等待线程队列0和等待线程队列1中移除,插入到内核的就绪线程队列里。当消息订阅者线程2执行时,会接着遍历消息总线0和消息总线1,并读出属于自己的消息。与所述图2a所示的实施例一致的,请参阅图3,图3是本申请实施例提供的另一种线程消息处理方法的流程示意图,应用于电子设备,所述电子设备包括第一消息订阅者线程订阅的多个主题的多个消息总线、就绪线程队列以及与所述多个消息总线一一对应的多个等待线程队列,如图所示,本线程消息处理方法包括:s301,获取就绪线程队列中当前需要处理的第一消息订阅者线程,所述电子设备包括所述第一消息订阅者线程订阅的多个主题的多个消息总线、所述就绪线程队列以及与所述多个消息总线一一对应的多个等待线程队列;s302,获取所述第一消息订阅者线程订阅的所述多个主题的多个消息链表,所述多个主题与所述多个消息链表一一对应,消息链表用于存储对应的主题的消息总线中插入的所述第一消息订阅者线程的未被读取的消息。s303,检测所述多个消息链表中是否存在所述第一消息订阅者线程的消息。若是,则执行步骤s304、s305,若否,则执行步骤s306。s304,获取检测到的消息所属的目标消息链表。s305,读取所述目标消息链表中的所有消息。s306,移除所述就绪队列中的所述第一消息订阅者线程,并在所述多个等待线程队列的每个等待线程队列插入所述第一消息订阅者线程。可以看出,本申请实施例中,电子设备包括第一消息订阅者线程订阅的多个主题的多个消息总线、就绪线程队列以及与多个消息总线一一对应的多个等待线程队列,在该消息总线架构下,电子设备首先获取就绪线程队列中当前需要处理的第一消息订阅者线程,其次,检测多个消息总线中是否存在第一消息订阅者线程的消息;若是,则调用第一消息订阅者线程读取检测到的消息;若否,则移除就绪队列中的第一消息订阅者线程,并在多个等待线程队列的每个等待线程队列插入第一消息订阅者线程。可见,由于就绪线程队列中的线程在无消息可收取状态下会被及时移除,并转入等待线程队列,从而避免因为一个消息总线的空闲阻塞其它消息总线的消息处理,保证任意一个消息总线上插入第一消息订阅者线程的消息均能够被及时查收,实现同时订阅多个fffo首次匹配首次出来类型的消息总线,提高多主题订阅场景中线程消息传输的连续性和稳定性。与上述图2a、图3所示的实施例一致的,请参阅图4,图4是本申请实施例提供的一种电子设备400的结构示意图,如图所示,该电子设备包括soc的预设内核401、存储器402、通信接口403以及一个或多个程序404,其中,上述一个或多个程序404被存储在上述存储器402中,并且被配置由上述预设内核401执行,上述程序404包括用于执行以下步骤的指令;获取就绪线程队列中当前需要处理的第一消息订阅者线程,所述电子设备包括所述第一消息订阅者线程订阅的多个主题的多个消息总线、所述就绪线程队列以及与所述多个消息总线一一对应的多个等待线程队列;以及检测所述多个消息总线中是否存在所述第一消息订阅者线程的消息;若是,则调用所述第一消息订阅者线程读取检测到的消息;若否,则移除所述就绪队列中的所述第一消息订阅者线程,并在所述多个等待线程队列的每个等待线程队列插入所述第一消息订阅者线程。可以看出,本申请实施例中,电子设备包括第一消息订阅者线程订阅的多个主题的多个消息总线、就绪线程队列以及与多个消息总线一一对应的多个等待线程队列,在该消息总线架构下,电子设备首先获取就绪线程队列中当前需要处理的第一消息订阅者线程,其次,检测多个消息总线中是否存在第一消息订阅者线程的消息;若是,则调用第一消息订阅者线程读取检测到的消息;若否,则移除就绪队列中的第一消息订阅者线程,并在多个等待线程队列的每个等待线程队列插入第一消息订阅者线程。可见,由于就绪线程队列中的线程在无消息可收取状态下会被及时移除,并转入等待线程队列,从而避免因为一个消息总线的空闲阻塞其它消息总线的消息处理,保证任意一个消息总线上插入第一消息订阅者线程的消息均能够被及时查收,实现同时订阅多个fffo首次匹配首次出来类型的消息总线,提高多主题订阅场景中线程消息传输的连续性和稳定性。在一个可能的示例中,在所述检测所述多个消息总线中是否存在所述第一消息订阅者线程的消息方面,所述程序404具体包括用于执行以下操作的指令:遍历所述多个消息总线中的每个消息总线,确定是否存在所述第一消息订阅者线程的消息。在一个可能的示例中,在所述调用所述第一消息订阅者线程读取检测到的消息方面,所述程序404具体包括用于执行以下操作的指令:确定通过遍历查询到的所述第一消息订阅者线程的未读取的所有消息;以及调用所述第一消息订阅者线程读取所述所有消息。在一个可能的示例中,在所述检测所述多个消息总线中是否存在所述第一消息订阅者线程的消息方面,所述程序404具体包括用于执行以下操作的指令:获取所述第一消息订阅者线程订阅的所述多个主题的多个消息链表,所述多个主题与所述多个消息链表一一对应,消息链表用于存储对应的主题的消息总线中插入的所述第一消息订阅者线程的未被读取的消息;以及检测所述多个消息链表中是否存在所述第一消息订阅者线程的消息。在一个可能的示例中,在所述调用所述第一消息订阅者线程读取检测到的消息方面,所述程序404具体包括用于执行以下操作的指令:获取检测到的消息所属的目标消息链表;以及读取所述目标消息链表中的所有消息。在一个可能的示例中,所述程序404还包括用于执行以下操作的指令:在所述获取所述就绪线程队列中当前需要处理的第一消息订阅者线程之前,接收发布者发布的所述第一消息订阅者线程的消息;以及在所述消息对应的消息总线中插入所述消息;以及移除所述多个等待线程队列中的所述第一消息订阅者线程,并在所述就绪线程队列中插入所述第一消息订阅者线程。在一个可能的示例中,等待线程队列以哈希表的形式描述消息订阅者线程的名字与地址,所述哈希表包括线程名字字段和线程控制块的地址之间的对应关系;在所述移除所述多个等待线程队列中的所述第一消息订阅者线程方面,所述具体包括用于执行以下操作的指令:针对所述多个等待线程队列中的每个等待线程队列,执行如下操作:以所述第一消息订阅者线程的线程名字字段为查询标识,查询当前处理的等待线程队列的哈希表,获取所述第一消息订阅者线程的线程控制块的地址;以及根据所述第一消息订阅者线程的线程控制块的地址,将所述第一消息订阅者线程的线程控制块从所述当前处理的等待线程队列移除。在一个可能的示例中,所述程序404还包括用于执行以下操作的指令:在所述接收发布者发布的所述第一消息订阅者线程的消息之前,在检测到所述第一消息订阅者线程针对所述多个主题的订阅请求时,在所述多个等待线程队列的每个等待线程队列中插入所述第一消息订阅者线程。上述主要从方法侧执行过程的角度对本申请实施例的方案进行了介绍。可以理解的是,电子设备为了实现上述功能,其包含了执行各个功能相应的硬件结构和/或软件模块。本领域技术人员应该很容易意识到,结合本文中所提供的实施例描述的各示例的单元及算法步骤,本申请能够以硬件或硬件和计算机软件的结合形式来实现。某个功能究竟以硬件还是计算机软件驱动硬件的方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用使用不同方法来实现所描述的功能,但是这种实现不应认为超出本申请的范围。本申请实施例可以根据上述方法示例对电子设备进行功能单元的划分,例如,可以对应各个功能划分各个功能单元,也可以将两个或两个以上的功能集成在一个处理单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。需要说明的是,本申请实施例中对单元的划分是示意性的,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式。图5是本申请实施例中所涉及的线程消息处理装置500的功能单元组成框图。该线程消息处理装置500应用于电子设备的系统级芯片soc的预设内核,所述电子设备设置有首次匹配首次出来fffo的消息总线、就绪线程队列和等待线程队列,所述内核与所述消息总线、所述就绪线程队列和所述等待线程队列通信连接,该线程消息处理装置500包括处理单元501和通信单元502,其中,所述处理单元501,用于通过所述通信单元502获取就绪线程队列中当前需要处理的第一消息订阅者线程,所述电子设备包括所述第一消息订阅者线程订阅的多个主题的多个消息总线、所述就绪线程队列以及与所述多个消息总线一一对应的多个等待线程队列;以及用于检测所述多个消息总线中是否存在所述第一消息订阅者线程的消息;若是,则调用所述第一消息订阅者线程读取检测到的消息;若否,则移除所述就绪队列中的所述第一消息订阅者线程,并在所述多个等待线程队列的每个等待线程队列插入所述第一消息订阅者线程。其中,所述线程消息处理装置500还可以包括存储单元503,用于存储电子设备的程序代码和数据。所述处理单元501可以是处理器,所述通信单元502可以是触控显示屏或者收发器,存储单元503可以是存储器。可以看出,本申请实施例中,电子设备包括第一消息订阅者线程订阅的多个主题的多个消息总线、就绪线程队列以及与多个消息总线一一对应的多个等待线程队列,在该消息总线架构下,电子设备首先获取就绪线程队列中当前需要处理的第一消息订阅者线程,其次,检测多个消息总线中是否存在第一消息订阅者线程的消息;若是,则调用第一消息订阅者线程读取检测到的消息;若否,则移除就绪队列中的第一消息订阅者线程,并在多个等待线程队列的每个等待线程队列插入第一消息订阅者线程。可见,由于就绪线程队列中的线程在无消息可收取状态下会被及时移除,并转入等待线程队列,从而避免因为一个消息总线的空闲阻塞其它消息总线的消息处理,保证任意一个消息总线上插入第一消息订阅者线程的消息均能够被及时查收,实现同时订阅多个fffo首次匹配首次出来类型的消息总线,提高多主题订阅场景中线程消息传输的连续性和稳定性。在一个可能的示例中,在所述检测所述多个消息总线中是否存在所述第一消息订阅者线程的消息方面,所述处理单元501具体用于:遍历所述多个消息总线中的每个消息总线,确定是否存在所述第一消息订阅者线程的消息。在一个可能的示例中,在所述调用所述第一消息订阅者线程读取检测到的消息方面,所述处理单元501具体用于:确定通过遍历查询到的所述第一消息订阅者线程的未读取的所有消息;以及调用所述第一消息订阅者线程读取所述所有消息。在一个可能的示例中,在所述检测所述多个消息总线中是否存在所述第一消息订阅者线程的消息方面,所述处理单元501具体用于:获取所述第一消息订阅者线程订阅的所述多个主题的多个消息链表,所述多个主题与所述多个消息链表一一对应,消息链表用于存储对应的主题的消息总线中插入的所述第一消息订阅者线程的未被读取的消息;以及检测所述多个消息链表中是否存在所述第一消息订阅者线程的消息。在一个可能的示例中,在所述调用所述第一消息订阅者线程读取检测到的消息方面,所述处理单元501具体用于:获取检测到的消息所属的目标消息链表;以及读取所述目标消息链表中的所有消息。在一个可能的示例中,所述处理单元501在通过所述通信单元502获取所述就绪线程队列中当前需要处理的第一消息订阅者线程之前,还用于:通过所述通信单元502接收发布者发布的所述第一消息订阅者线程的消息;以及在所述消息对应的消息总线中插入所述消息;以及移除所述多个等待线程队列中的所述第一消息订阅者线程,并在所述就绪线程队列中插入所述第一消息订阅者线程。在一个可能的示例中,等待线程队列以哈希表的形式描述消息订阅者线程的名字与地址,所述哈希表包括线程名字字段和线程控制块的地址之间的对应关系;在所述移除所述多个等待线程队列中的所述第一消息订阅者线程方面,所述处理单元501具体用于:针对所述多个等待线程队列中的每个等待线程队列,执行如下操作:以所述第一消息订阅者线程的线程名字字段为查询标识,查询当前处理的等待线程队列的哈希表,获取所述第一消息订阅者线程的线程控制块的地址;以及根据所述第一消息订阅者线程的线程控制块的地址,将所述第一消息订阅者线程的线程控制块从所述当前处理的等待线程队列移除。在一个可能的示例中,所述处理单元501在通过所述通信单元502接收发布者发布的所述第一消息订阅者线程的消息之前,还用于:在检测到所述第一消息订阅者线程针对所述多个主题的订阅请求时,在所述多个等待线程队列的每个等待线程队列中插入所述第一消息订阅者线程。可以理解的是,由于方法实施例与装置实施例为相同技术构思的不同呈现形式,因此,本申请方法实施例部分的内容应同步适配于装置实施例部分,此处不再赘述。本申请实施例还提供一种计算机存储介质,其中,该计算机存储介质存储用于电子数据交换的计算机程序,该计算机程序使得计算机执行如上述方法实施例中记载的任何一种线程消息处理方法的部分或全部步骤,上述计算机包括电子设备。本申请实施例还提供一种计算机程序产品,所述计算机程序产品包括存储了计算机程序的非瞬时性计算机可读存储介质,所述计算机程序可操作来使计算机执行如上述方法实施例中记载的任何一种线程消息处理方法的部分或全部步骤,上述计算机包括电子设备。需要说明的是,对于前述的各方法实施例,为了简单描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本申请并不受所描述的动作顺序的限制,因为依据本申请,某些步骤可以采用其他顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于优选实施例,所涉及的动作和模块并不一定是本申请所必须的。在上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述的部分,可以参见其他实施例的相关描述。在本申请所提供的几个实施例中,应该理解到,所揭露的装置,可通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性或其它的形式。所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。另外,在本申请各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。所述集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储器中。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储器中,包括若干指令用以使得一台计算机设备(可为个人计算机、服务器或者网络设备等)执行本申请各个实施例所述方法的全部或部分步骤。而前述的存储器包括:u盘、只读存储器(rom,read-onlymemory)、随机存取存储器(ram,randomaccessmemory)、移动硬盘、磁碟或者光盘等各种可以存储程序代码的介质。本领域普通技术人员可以理解上述实施例的各种方法中的全部或部分步骤是可以通过程序来指令相关的硬件来完成,该程序可以存储于计算机可读存储器中,存储器可以包括:闪存盘、只读存储器(英文:read-onlymemory,简称:rom)、随机存取器(英文:randomaccessmemory,简称:ram)、磁盘或光盘等。以上对本申请实施例进行了详细介绍,本文中应用了具体个例对本申请的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本申请的方法及其核心思想;同时,对于本领域的一般技术人员,依据本申请的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本申请的限制。可以理解的是,凡是被控制或者被配置以用于执行本申请所描述的流程图的处理方法的产品,如上述流程图的处理装置、电子设备以及计算机可读存储介质,均属于本申请所描述的相关产品的范畴。当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1