一种自动跳出阻塞式代码段的控制方法技术

技术编号:13779839 阅读:19 留言:0更新日期:2016-10-04 13:22
一种自动跳出阻塞式代码段的控制方法,在当前线程中启动一对子线程,其中一个线程就封装了那个阻塞式的代码段,另外一个线程称为阻塞式线程的监护线程,主要导入阻塞式线程的句柄、和阻塞式线程启动时的系统时间,作为线程的输入参数;在监护线程内部,通过考察阻塞式线程的执行情况,作出是否终结阻塞式线程生命的行动,从而达到跳出阻塞状态的目的。本发明专利技术提供了一种实现自动跳出阻塞式代码段、稳定性较好的自动跳出阻塞式代码段的控制方法。

【技术实现步骤摘要】

本专利技术软件开发控制领域,涉及一种自动跳出阻塞式代码段的控制方法
技术介绍
在软件开发中,数据IO、网络访问等操作由于设备或者网络环境的不稳定,常常会造成程序执行的阻塞。例如,客户端从远程数据库访问数据时,阻塞会造成客户端读写数据的中断,从而影响对后续业务逻辑的执行。一般而言,这些带有阻塞性质的软件代码往往是第三方所提供的具备一定可用性质、甚至具备工业级稳定性的开发库、或软件包。理论上,这些软件包提供的接口里必定含有超时应对机制,开发者只要在调用时配置一定的超时参数就可以避免阻塞。但是阻塞引起的原因还有服务端的不恰当的配合设计,有时候第三方提供的超时机制并不能真正完全奏效。还有一些情况是这些带有阻塞性质的软件代码,本身就是属于开发者自己开发的内容。在以上两种情况时都需要开发者自己维护设计一套“阻塞自动恢复”机制。强调这里“阻塞式代码段”的概念是指并非此段代码被阻塞式地执行(事实上只要不在多线程状态下,大概一般的代码都会被阻塞式地执行),而是指这段代码执行时有一定的概率会进入无限止地停顿中。
技术实现思路
为了克服已有技术阻塞式代码段无法自动跳出、稳定性较差的不足,本专利技术提供了一种实现自动跳出阻塞式代码段、稳定性较好的自动跳出阻塞式代码段的控制方法。本专利技术解决其技术问题所采用的技术方案是:一种自动跳出阻塞式代码段的控制方法,包括如下步骤:1)在当前线程里启动2个子线程;首先启动的一个子线程函数封装了阻塞式的代码段,称为阻塞式线程;另外一个子线程称为监护线程,启动监护线程时输入当前的系统时间、阻塞式线程的句柄,当前系统时间作为计算线程工作时长的初始时间;2)在监护线程中,先查询阻塞式线程的工作状态,只有可能的2种状态:①、“进行”,②、“结束”,并获得该线程的状态;3)判断状态是“进行”、还是“结束”;4)如“结束”,到步骤8)。5)如“进行”,则取当前系统时间,并由初始时间计算阻塞式线程已经进行的时间长度;6)如时间长度不超过预设的阈值,则回到步骤2);7)如果时间长度超过阈值,则终结阻塞式线程;8)退出监护线程。进一步,步骤2)中查询线程状态,使用开发环境提供的API即可获得状态。再进一步,步骤5中,阈值设定为在正常情况下阻塞式代码执行的时间长度(即单线程执行CPU占时)的若干倍。本专利技术的技术构思为:在当前线程中启动一对子线程,其中一个线程就封装了那个阻塞式的代码段(即如实现这个数据IO或网络访问等类似任务的函数),另外一个线程称为阻塞式线程的监护线程。它主要导入阻塞式线程的句柄、和阻塞式线程启动时的系统时间,作为
线程的输入参数。在监护线程内部,通过考察阻塞式线程的执行情况,作出是否终结阻塞式线程生命的行动,从而达到跳出阻塞状态的目的。本专利技术的有益效果主要表现在:实现自动跳出阻塞式代码段、稳定性较好。附图说明图1是自动跳出阻塞式代码段的控制方法的逻辑原理图。具体实施方式下面结合附图对本专利技术作进一步描述。参照图1,一种自动跳出阻塞式代码段的控制方法,包括如下步骤:1)在当前线程里启动2个子线程;首先启动的一个子线程函数封装了阻塞式的代码段,称为阻塞式(任务)线程;另外一个子线程称为监护线程。启动监护线程时输入当前的系统时间、阻塞式线程的句柄,当前系统时间作为计算线程工作时长的初始时间;2)方法的实现主要在监护线程里进行:先查询阻塞式线程的工作状态,只有可能的2种状态,一、还在进行中,二、已经结束。并获得该线程的状态;3)判断状态是“进行”、还是“结束”。4)如结束,到步骤8)。5)如进行,则取当前系统时间,并由初始时间计算阻塞式线程已经进行的时间长度。6)如时长不超过预设的阈值,则回到步骤2)。7)如果超过阈值则终结(编程语言里也可以称为“杀死”)阻塞式线程。8)退出监护线程。步骤2)中查询线程状态,不需要使用线程间通信技术,而是直接使用开发环境提供的API即可获得状态。例如,C/C++、JAVA、C#等开发环境均有线程类API提供查询线程状态。步骤5)计算的时间长度,严格地说,并不是真正的阻塞式代码执行的时间占用长度,这个和CPU的单核、多核机制,以及线程调度有关。可以简单的认为,将时间占用长度除以当前进程中的线程数目(这里是3,当前线程、任务线程和监护线程),可以得到估算的任务线程(阻塞式代码段)执行时间的长度。此外,阻塞式代码段的精确执行占时只有通过单线程运行来测量。但时长阈值设定为在正常情况下阻塞式代码执行的时间长度(即单线程执行CPU占时)的若干倍即可避免在该阻塞任务线程正常执行时被突然中断的风险。例如,此处可以将该多线程环境下的任务的时间占用长度除以3、再乘以10倍,作为超时的衡量时间标准。监护线程可以不用生成,则所有在监护线程里实现的方法步骤统一在当前(主)线程下操作。本文档来自技高网
...

【技术保护点】
一种自动跳出阻塞式代码段的控制方法,其特征在于:包括如下步骤:1)在当前线程里启动2个子线程;首先启动的一个子线程函数封装了阻塞式的代码段,称为阻塞式线程;另外一个子线程称为监护线程,启动监护线程时输入当前的系统时间、阻塞式线程的句柄,当前系统时间作为计算线程工作时长的初始时间;2)在监护线程中,先查询阻塞式线程的工作状态,只有可能的2种状态:①、“进行”,②、“结束”,并获得该线程的状态;3)判断状态是“进行”、还是“结束”;4)如“结束”,到步骤8)。5)如“进行”,则取当前系统时间,并由初始时间计算阻塞式线程已经进行的时间长度;6)如时间长度不超过预设的阈值,则回到步骤2);7)如果时间长度超过阈值,则终结阻塞式线程;8)退出监护线程。

【技术特征摘要】
1.一种自动跳出阻塞式代码段的控制方法,其特征在于:包括如下步骤:1)在当前线程里启动2个子线程;首先启动的一个子线程函数封装了阻塞式的代码段,称为阻塞式线程;另外一个子线程称为监护线程,启动监护线程时输入当前的系统时间、阻塞式线程的句柄,当前系统时间作为计算线程工作时长的初始时间;2)在监护线程中,先查询阻塞式线程的工作状态,只有可能的2种状态:①、“进行”,②、“结束”,并获得该线程的状态;3)判断状态是“进行”、还是“结束”;4)如“结束”,到步骤8)...

【专利技术属性】
技术研发人员:陆成刚徐利光
申请(专利权)人:浙江工业大学
类型:发明
国别省市:浙江;33

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1