[发明专利]一种基于无锁队列的消息处理方法和装置在审
申请号: | 201711346923.2 | 申请日: | 2017-12-15 |
公开(公告)号: | CN108153596A | 公开(公告)日: | 2018-06-12 |
发明(设计)人: | 黄晓权 | 申请(专利权)人: | 珠海金山网络游戏科技有限公司;珠海西山居移动游戏科技有限公司 |
主分类号: | G06F9/54 | 分类号: | G06F9/54 |
代理公司: | 广州嘉权专利商标事务所有限公司 44205 | 代理人: | 俞梁清 |
地址: | 519000 广东省珠*** | 国省代码: | 广东;44 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 任务消息 消息队列 消息处理 无锁 队列 方法和装置 中央处理器 并发管理 队列清空 分发处理 函数执行 循环操作 应用程序 初始化 主线程 检测 弹出 队头 队尾 多核 放入 调用 分发 轮流 创建 | ||
本发明提出一种基于无锁队列的消息处理方法,包括以下步骤:创建任务消息的消息队列,并对队列清空以实现消息队列的初始化;获取主线程接收到的任务消息,并将获取的任务消息放入消息队列的队尾;按照次序从消息队列的队头弹出任务消息,并检测任务消息的类型;根据检测所得的类型,调用对应的分发处理函数执行。本发明的有益效果为:充分利用中央处理器多核的特点并发管理任务消息的接收和分发,并通过轮流循环操作有序的处理每一个消息,使应用程序的执行效率得到大大提升,从而增加其稳定性。
技术领域
本发明涉及计算机系统领域,尤其涉及一种基于无锁队列的消息处理方法和装置。
背景技术
在计算机领域中,随着应用程序功能的多样化和复杂化,其各线程之间需要通过大量的消息交流协作,使得软件能够正常地运行。但是,计算机中可分配调用的资源是有限的,当面对大量消息(例如是网络消息、游戏逻辑消息或者编辑器编辑消息)的时候,操作系统就会出现消息处理不过来的情况。具体地,此时操作系统要么丢失消息,使得相应的操作没有得到响应;要么消息需要等待较长的时间才能得到响应,从而使得程序运行不流畅。
为了处理上述情况,目前的主流方法是基于多线程的操作系统,对各条消息创建相应的线程执行。虽然上述方法使得应用程序的主线程逻辑执行不因消息响应的延迟而受到妨碍,但是其并没有改善消息响应延迟的问题。应用程序依然会在大量消息需要执行的情况下出现执行效率下降。
发明内容
本发明的目的是解决现有技术的不足,提供一种基于无锁队列的消息处理的方法和装置通过无锁队列轮流循环处理的机制和组合利用多线程的机制,能够获得提升应用程序执行效率和运行时稳定性的技术效果。
为了实现上述目的,本发明采用以下的技术方案。
首先,本发明提出一种基于无锁队列的消息处理方法,包括以下步骤:创建任务消息的消息队列,并对队列清空以实现消息队列的初始化;获取主线程接收到的任务消息,并将获取的任务消息放入消息队列的队尾;按照次序从消息队列的队头弹出任务消息,并检测任务消息的类型;根据检测所得的类型,调用对应的分发处理函数执行。
在本发明的一个方法实施例中,任务消息的放入和弹出是由区别于主线程的其他线程执行。
进一步地,在本发明的上述方法实施例中,任务消息的放入和弹出分别是由至少一个线程执行。
在本发明的一个方法实施例中,当消息队列在预设时间段内为空队列时,新获取主线程接收到的任务消息将直接返回由主线程执行。
在本发明的一个方法实施例中,在将获取的任务消息放入消息队列的队尾前还执行如下子步骤:校验所获取主线程接收到的任务消息,并对错误的任务消息执行容错处理。
进一步地,在本发明的上述方法实施例中,容错处理的处理时间超过预设阈值时,对应的任务消息将抛弃并给出警告;否则容错处理成功校正完毕后,任务消息将放入消息队列的队尾。
可替代地,在本发明的上述方法实施例中,任务消息的校验和容错处理是由区别于主线程的其他线程执行。
在本发明的一个方法实施例中,当消息队列的长度大于预设长度时将发出警告。
其次,本发明还提出一种基于无锁队列的消息处理装置,包括以下装置:初始化模块,用于创建任务消息的消息队列,并对队列清空以实现消息队列的初始化;入队模块,用于获取主线程接收到的任务消息,并将获取的任务消息放入消息队列的队尾;出队模块,用于按照次序从消息队列的队头弹出任务消息,并检测任务消息的类型;处理模块,用于根据检测所得的类型,调用对应的分发处理函数执行。
在本发明的一个装置实施例中,入队模块和出队模块是通过区别于主线程的其他线程执行消息的放入和弹出。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于珠海金山网络游戏科技有限公司;珠海西山居移动游戏科技有限公司,未经珠海金山网络游戏科技有限公司;珠海西山居移动游戏科技有限公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201711346923.2/2.html,转载请声明来源钻瓜专利网。