【技术实现步骤摘要】
一种不阻塞线程等待异步消息的方法、系统、服务器及存储介质
本专利技术涉及软件工程领域,具体涉及一种不阻塞线程等待异步消息的方法、系统、服务器及存储介质。
技术介绍
线程阻塞是线程在执行耗时操作时处于无响应状态,无法处理线程中其他任务。异步函数是执行函数调用后立即返回,但操作的结果在未来某个时刻通知调用方。程序的运行实际是由若干线程完成的,这其中包括主线程和其他工作线程。线程有时需要等待某个异步函数调用结果后再继续运行当前调用栈,而这些异步函数结果是在未来某个不确定时间返回的,这就导致线程需要处于等待状态,而该过程会造成该线程阻塞无响应。现有办法首先在异步消息来临时再执行线程的后续操作,该方法存在后续操作不易封装界定的问题,同时也将增大线程逻辑和异步函数的耦合,且短暂容忍线程阻塞。
技术实现思路
鉴于现有技术存在的问题,本专利技术的目的是提供一种不阻塞线程等待异步消息的方法、系统、服务器及存储介质,结合任务队列循环机制和回调通知机制,实现同步且不阻塞的线程工作模式。为了实现上述目的,本专利技术采用的技术方案为一种不阻塞线程等待异步消息的方法,所述方法包括以下步骤:S1、在线程中创建任务队列TaskQueue,所述任务队列中设有节点将线程中需要执行的各类任务进行封装,所述各类任务被封装为函数对象Task;S2、线程开启后创建第一循环函数查找所述任务队列中待执行的Task,并进行执行;S3、任务列表中执行任一Task时若需要调用异步函数,则在异步函 ...
【技术保护点】
1.一种不阻塞线程等待异步消息的方法,其特征在于,所述方法包括以下步骤:/nS1、在线程中创建任务队列TaskQueue,所述任务队列中设有节点将线程中需要执行的各类任务进行封装,所述各类任务被封装为函数对象Task;/nS2、线程开启后创建第一循环函数查找所述任务队列中待执行的Task,并进行执行;/nS3、任务列表中执行任一Task时若需要调用异步函数,则在异步函数被调用前,创建互斥对象,开始执行异步函数时,运用互斥对象进行标记,;/nS4、在异步函数调用后,创建第二循环函数,通过第二循环函数调用互斥对象进行判断异步函数是否执行完毕,若异步函数未执行完毕,则获取线程任务队列,继续执行步骤S2,若执行完毕,则停止第二循环函数,继续执行调用栈的后续操作。/n
【技术特征摘要】
1.一种不阻塞线程等待异步消息的方法,其特征在于,所述方法包括以下步骤:
S1、在线程中创建任务队列TaskQueue,所述任务队列中设有节点将线程中需要执行的各类任务进行封装,所述各类任务被封装为函数对象Task;
S2、线程开启后创建第一循环函数查找所述任务队列中待执行的Task,并进行执行;
S3、任务列表中执行任一Task时若需要调用异步函数,则在异步函数被调用前,创建互斥对象,开始执行异步函数时,运用互斥对象进行标记,;
S4、在异步函数调用后,创建第二循环函数,通过第二循环函数调用互斥对象进行判断异步函数是否执行完毕,若异步函数未执行完毕,则获取线程任务队列,继续执行步骤S2,若执行完毕,则停止第二循环函数,继续执行调用栈的后续操作。
2.根据权利要求1所述一种不阻塞线程等待异步消息的方法,其特征在于,所述步骤S2中线程中若未找到待执行Task,则进入休眠状态,等待新的Task。
3.根据权利要求1所述一种不阻塞线程等待异步消息的方法,其特征在于,所述步骤S3标记异步函数包括以下步骤:
S31、在异步函数调用前,通过调用互斥对象中Lock函数进行加锁,即标记异步函数开始执行;
S32、当异步函数执行结束后,回调通知消息中调用互斥对象中的UNLock函数进行解锁,即标记异步函数执行完毕。
4.根据权利要求1所述一种不阻塞线程等待异步消息的方法,其特征在于,所述步骤S4通过调用互斥对象中的TryLock函数,进行非阻塞的判断异步函数是否执行完毕。
5.根据权利要求4所述一种不阻塞线程等待异步消息的方法,其特征在于,判断异步函数执行完毕包括以下步骤:
S41、若TryLock函数返回False,则表示异步函数尚未执行完毕;
S42、若TryLock函数返回True,则表示异步函数执行完毕。
6.一种不阻塞线程等待异步消息的系统,其特征在于,所述系统包括创建模块、查找模块、标记...
【专利技术属性】
技术研发人员:刘迟,
申请(专利权)人:武汉瓯越网视有限公司,
类型:发明
国别省市:湖北;42
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。