[发明专利]一种不阻塞线程等待异步消息的方法、系统、服务器及存储介质在审
申请号: | 201910025492.2 | 申请日: | 2019-01-11 |
公开(公告)号: | CN111435314A | 公开(公告)日: | 2020-07-21 |
发明(设计)人: | 刘迟 | 申请(专利权)人: | 武汉瓯越网视有限公司 |
主分类号: | G06F9/48 | 分类号: | G06F9/48;G06F9/54 |
代理公司: | 武汉河山金堂专利事务所(普通合伙) 42212 | 代理人: | 胡清堂;陈懿 |
地址: | 430000 湖北省武汉市东湖新技术开*** | 国省代码: | 湖北;42 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 一种 阻塞 线程 等待 异步 消息 方法 系统 服务器 存储 介质 | ||
本发明涉及一种不阻塞线程等待异步消息的方法、系统、服务器及存储介质,通过任务队列循环机制和回调通知机制,实现同步且不阻塞的线程工作模式。能保证线程在异步消息到来之前不会继续执行当前调用栈,并且不会造成无响应状态,实现方式简单,不与当前线程具体业务逻辑耦合。
技术领域
本发明涉及软件工程领域,具体涉及一种不阻塞线程等待异步消息的方法、系统、服务器及存储介质。
背景技术
线程阻塞是线程在执行耗时操作时处于无响应状态,无法处理线程中其他任务。异步函数是执行函数调用后立即返回,但操作的结果在未来某个时刻通知调用方。
程序的运行实际是由若干线程完成的,这其中包括主线程和其他工作线程。线程有时需要等待某个异步函数调用结果后再继续运行当前调用栈,而这些异步函数结果是在未来某个不确定时间返回的,这就导致线程需要处于等待状态,而该过程会造成该线程阻塞无响应。
现有办法首先在异步消息来临时再执行线程的后续操作,该方法存在后续操作不易封装界定的问题,同时也将增大线程逻辑和异步函数的耦合,且短暂容忍线程阻塞。
发明内容
鉴于现有技术存在的问题,本发明的目的是提供一种不阻塞线程等待异步消息的方法、系统、服务器及存储介质,结合任务队列循环机制和回调通知机制,实现同步且不阻塞的线程工作模式。
为了实现上述目的,本发明采用的技术方案为一种不阻塞线程等待异步消息的方法,所述方法包括以下步骤:
S1、在线程中创建任务队列TaskQueue,所述任务队列中设有节点将线程中需要执行的各类任务进行封装,所述各类任务被封装为函数对象Task;
S2、线程开启后创建第一循环函数查找所述任务队列中待执行的Task,并进行执行;
S3、任务列表中执行任一Task时若需要调用异步函数,则在异步函数被调用前,创建互斥对象,开始执行异步函数时,运用互斥对象进行标记;
S4、在异步函数调用后,创建第二循环函数,通过第二循环函数调用互斥对象进行判断异步函数是否执行完毕,若异步函数未执行完毕,则获取线程任务队列,继续执行步骤S2,若执行完毕,则停止第二循环函数,继续执行调用栈的后续操作。
在上述技术方案中,所述步骤S2中线程中若未找到待执行Task,则进入休眠状态,等待新的Task。
在上述技术方案中,所述步骤S3标记异步函数包括以下步骤:
S31、在异步函数调用前,通过调用互斥对象中Lock函数进行加锁,即标记异步函数开始执行;
S32、当异步函数执行结束后,回调通知消息中调用互斥对象中的UNLock函数进行解锁,即标记异步函数执行完毕。
在上述技术方案中,所述步骤S4通过调用互斥对象中的Try Lock函数,进行非阻塞的判断异步函数是否执行完毕。
在上述技术方案中,判断异步函数执行完毕包括以下步骤:
S41、若Try Lock函数返回False,则表示异步函数尚未执行完毕;
S42、若Try Lock函数返回True,则表示异步函数执行完毕。
本发明还公开一种不阻塞线程等待异步消息的系统,所述系统包括创建模块、查找模块、标记模块以及执行模块;
创建模块,用于在线程中创建任务队列TaskQueue,所述任务队列中设有节点将线程中需要执行的各类任务进行封装,所述各类任务被封装为函数对象Task;
查找模块,用于线程开启后创建第一循环函数查找所述任务队列中待执行的Task,并进行执行;
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于武汉瓯越网视有限公司,未经武汉瓯越网视有限公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201910025492.2/2.html,转载请声明来源钻瓜专利网。