一种共享队列中的消息处理方法、装置及接收核与流程

文档序号:13915692阅读:375来源:国知局
一种共享队列中的消息处理方法、装置及接收核与流程

本发明属于消息处理技术领域,尤其涉及一种共享队列中的消息处理方法、装置及接收核。



背景技术:

一般在多线程多核中使用共享消息来加快线程或核间通信的效率。其中一种广泛使用的场景是一个发送端,多个接收端。消息数据可以被其中任一个核接收,多个接收核之间存在竞争关系。

请参阅图1,为多接收端的共享队列消息处理场景,一般的处理流程示例如下,场景中假定2个接收核:

步骤1:发送核将消息数据写入到共享队列中;

步骤2:共享队列产生事件中断,通知所有的相关的接收核;

步骤3:接收核中的中断处理程序处理中断,根据队列序号等信息进行判断,调度相应的业务线程0或1来从共享队列中读取消息数据;

步骤4:业务线程0和1都从共享队列中竞争式地读取消息。这样,一个业务线程能读取到消息,另外一个业务线程则读取不到消息。读取不到消息的业务线程会不执行任何操作而退出。

由上可知,由于消息共享的原因,整个流程中会有无效业务线程的唤醒,当消息比较多的时候导致核的运行效率非常低;另外,业务线程在每次唤醒时无法处理大于1的固定消息个数。比如,如果每次唤醒后固定处理2个消息,共享队列里面每来2个消息产生一个中断,当一个消息被读取时,有可能另外一个消息被其他线程读取了。



技术实现要素:

本发明的目的在于提供一种共享队列中的消息处理方法、装置及接收核,旨在解决现有技术中存在的由于消息共享的原因,整个流程中会有无效业务线程的唤醒,当消息比较多的时候导致核的运行效率非常低;另外,业务线程在每次唤醒时无法处理大于1的固定消息个数。比如,如果每次唤醒后固定处理2个消息,共享队列里面每来2个消息产生一个中断,当一个消息被读取时,有可能另外一个消息被其他线程读取了的问题。

本发明是这样实现的,一种共享队列中的消息处理方法,所述方法包括以下步骤:

接收核中的中断处理程序接收共享队列发送的中断通知消息;

所述中断处理程序读取预订消息个数;

所述中断处理程序判断读取到的预订消息个数;

如果判断出预订消息个数为0,则认为消息已被其他接收核抢占,不唤醒业务线程,所述中断处理程序直接退出;

如果判断出预订消息个数为非0,则认为消息预订成功,唤醒业务线程,所述业务线程从共享队列中读取消息。

本发明的另一目的在于提供一种共享队列中的消息处理装置,所述装置包括:

接收模块,用于接收共享队列发送的中断通知消息;

读取模块,用于读取预订消息个数;

判断模块,用于判断读取到的预订消息个数;

唤醒控制模块,用于如果判断出预订消息个数为0,则认为消息已被其他接收核抢占,不唤醒业务线程,所述中断处理程序直接退出;如果判断出预订消息个数为非0,则认为消息预订成功,唤醒业务线程,所述业务线程从共享队列中读取消息。

本发明的另一目的在于提供一种包括上面所述的共享队列中的消息处理装置的接收核。

在本发明中,当核的中断被触发后,通过消息预订是否成功决定是否激活对应的任务。使得在多个接收核共享一个队列时避免无效业务线程的唤醒,减少时延,另外可以使业务线程在多接收端的共享队列消息处理场景下处理大于1的固定个数的消息。

附图说明

图1是现有技术提供的共享队列消息处理流程示意图。

图2是本发明实施例提供的共享队列中的消息处理方法的实现流程示意图。

图3是本发明实施例提供的共享队列中的消息处理装置的结构示意图。

具体实施方式

为了使本发明的目的、技术方案及有益效果更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。

请参阅图2,为本发明实施例提供的共享队列中的消息处理方法的实现流程,其包括以下步骤:

在步骤S101中,接收核中的中断处理程序接收共享队列发送的中断通知消息;

作为本发明一实施例,在步骤S101之前,还包括以下步骤:

在共享队列中预先设置预订消息个数的计数器。

在步骤S102中,所述中断处理程序读取预订消息个数;

在本发明实施例中,所述中断处理程序从计数器中读取预订消息个数。

在步骤S103中,所述中断处理程序判断读取到的预订消息个数;

在步骤S104中,如果判断出预订消息个数为0,则认为消息已被其他接收核抢占,不唤醒业务线程,所述中断处理程序直接退出;

在步骤S105中,如果判断出预订消息个数为非0,则认为消息预订成功,唤醒业务线程,所述业务线程从共享队列中读取消息。

在本发明实施例中,假定共享队列里的总消息个数为total_num,触发中断的消息个数阈值为msg_threshold,预订消息个数为msg_rsv_num,预订消息个数的计算步骤,具体为:

在步骤S201中,业务线程读取共享队列中的预订消息个数msg_rsv_num,共享队列判断总消息个数total_num-触发中断的消息个数阈值msg_threshold-预订消息个数msg_rsv_num的值是否大于等于0,如果大于等于0,则计算msg_rsv_num的值,msg_rsv_num=msg_rsv_num+msg_threshold,共享队列向业务线程返回计算得到的msg_rsv_num的值;进入步骤S202。如果小于0,则计数器中的预订消息个数的值不变,共享队列向业务线程返回0值。

在步骤S202中,业务线程读取共享队列中的消息,共享队列判断msg_rsv_num是否大于0,如果大于0,则更新msg_rsv_num的值,msg_rsv_num=msg_rsv_num-1。

本发明实施例可以应用在LTE CoMP中,可以将sRIO数据接收完成消息发到共享队列;其它核在最低优先级(比IDLE任务优先级高)接收共享消息。当核的中断被触发后,通过消息预订是否成功决定是否激活对应的任务。

请参阅图3,为本发明实施例提供的共享队列中的消息处理装置,为了便于说明,仅示出了与本发明实施例相关的部分。所述共享队列中的消息处理装置包括:接收模块101、读取模块102、判断模块103、唤醒控制模块104。所述共享队列中的消息处理装置可以是内置于接收核中的软件单元、硬件单元或者是软硬件结合的单元。

接收模块101,用于接收共享队列发送的中断通知消息;

读取模块102,用于读取预订消息个数;

判断模块103,用于判断读取到的预订消息个数;

唤醒控制模块104,用于如果判断出预订消息个数为0,则认为消息已被其他接收核抢占,不唤醒业务线程,所述中断处理程序直接退出;如果判断出预订消息个数为非0,则认为消息预订成功,唤醒业务线程,所述业务线程从共享队列中读取消息。

作为本发明一实施例,所述装置还包括:设置模块。

设置模块,用于在共享队列中设置预订消息个数的计数器。

在本发明实施例中,

读取模块102,具体用于从计数器中读取预订消息个数。

作为本发明一实施例,所述装置还包括:预订消息个数读取模块、数值判断模块、计算模块、控制模块以及更新模块。

预订消息个数读取模块,用于读取共享队列中的预订消息个数msg_rsv_num;

数值判断模块,用于判断总消息个数total_num-触发中断的消息个数阈值msg_threshold-预订消息个数msg_rsv_num的值是否大于等于0,

计算模块,用于如果判断出大于等于0,则计算msg_rsv_num的值,msg_rsv_num=msg_rsv_num+msg_threshold;

控制模块,用于控制共享队列向业务线程返回计算得到的msg_rsv_num的值;如果小于0,则计数器中的预订消息个数的值不变,控制共享队列向业务线程返回0值。

更新模块,用于读取共享队列中的消息,共享队列判断msg_rsv_num是否大于0,如果大于0,则更新msg_rsv_num的值,msg_rsv_num=msg_rsv_num-1。

综上所述,本发明实施例当核的中断被触发后,通过消息预订是否成功决定是否激活对应的任务。使得在多个接收核共享一个队列时避免无效业务线程的唤醒,减少时延,另外可以使业务线程在多接收端的共享队列消息处理场景下处理大于1的固定个数的消息。

本领域普通技术人员可以理解实现上述实施例方法中的全部或部分步骤是可以通过程序来指令相关的硬件来完成,所述的程序可以存储于一计算机可读取存储介质中,所述的存储介质,如ROM/RAM、磁盘、光盘等。

以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明的保护范围之内。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1