CN105975325A - 一种自动跳出阻塞式代码段的控制方法 - Google Patents
一种自动跳出阻塞式代码段的控制方法 Download PDFInfo
- Publication number
- CN105975325A CN105975325A CN201610258263.1A CN201610258263A CN105975325A CN 105975325 A CN105975325 A CN 105975325A CN 201610258263 A CN201610258263 A CN 201610258263A CN 105975325 A CN105975325 A CN 105975325A
- Authority
- CN
- China
- Prior art keywords
- thread
- block type
- code segment
- control method
- blocking
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/44—Encoding
- G06F8/447—Target code generation
Landscapes
- Engineering & Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Debugging And Monitoring (AREA)
Abstract
一种自动跳出阻塞式代码段的控制方法,在当前线程中启动一对子线程,其中一个线程就封装了那个阻塞式的代码段,另外一个线程称为阻塞式线程的监护线程,主要导入阻塞式线程的句柄、和阻塞式线程启动时的系统时间,作为线程的输入参数;在监护线程内部,通过考察阻塞式线程的执行情况,作出是否终结阻塞式线程生命的行动,从而达到跳出阻塞状态的目的。本发明提供了一种实现自动跳出阻塞式代码段、稳定性较好的自动跳出阻塞式代码段的控制方法。
Description
技术领域
本发明软件开发控制领域,涉及一种自动跳出阻塞式代码段的控制方法。
背景技术
在软件开发中,数据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倍,作为超时的衡量时间标准。
监护线程可以不用生成,则所有在监护线程里实现的方法步骤统一在当前(主)线程下操作。
Claims (3)
1.一种自动跳出阻塞式代码段的控制方法,其特征在于:包括如下步骤:
1)在当前线程里启动2个子线程;首先启动的一个子线程函数封装了阻塞式的代码段,称为阻塞式线程;另外一个子线程称为监护线程,启动监护线程时输入当前的系统时间、阻塞式线程的句柄,当前系统时间作为计算线程工作时长的初始时间;
2)在监护线程中,先查询阻塞式线程的工作状态,只有可能的2种状态:①、“进行”,②、“结束”,并获得该线程的状态;
3)判断状态是“进行”、还是“结束”;
4)如“结束”,到步骤8)。
5)如“进行”,则取当前系统时间,并由初始时间计算阻塞式线程已经进行的时间长度;
6)如时间长度不超过预设的阈值,则回到步骤2);
7)如果时间长度超过阈值,则终结阻塞式线程;
8)退出监护线程。
2.如权利要求1所述的一种自动跳出阻塞式代码段的控制方法,其特征在于:步骤2)中查询线程状态,使用开发环境提供的API即可获得状态。
3.如权利要求1所述的一种自动跳出阻塞式代码段的控制方法,其特征在于:步骤5)中,阈值设定为在正常情况下阻塞式代码执行的时间长度的若干倍。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201610258263.1A CN105975325A (zh) | 2016-04-22 | 2016-04-22 | 一种自动跳出阻塞式代码段的控制方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201610258263.1A CN105975325A (zh) | 2016-04-22 | 2016-04-22 | 一种自动跳出阻塞式代码段的控制方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN105975325A true CN105975325A (zh) | 2016-09-28 |
Family
ID=56994338
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201610258263.1A Pending CN105975325A (zh) | 2016-04-22 | 2016-04-22 | 一种自动跳出阻塞式代码段的控制方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN105975325A (zh) |
Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1855067A (zh) * | 2005-04-28 | 2006-11-01 | 华为技术有限公司 | 一种实时操作系统中任务挂起状态监控方法 |
CN101355577A (zh) * | 2008-09-01 | 2009-01-28 | 中兴通讯股份有限公司 | 一种多线程通讯程序中防止线程吊死的方法 |
WO2011000299A1 (zh) * | 2009-07-02 | 2011-01-06 | 腾讯科技(深圳)有限公司 | 一种多页面浏览器防假死方法及装置 |
CN102375758A (zh) * | 2010-08-20 | 2012-03-14 | 联芯科技有限公司 | 移动通信设备浏览器防假死方法和装置 |
CN102681891A (zh) * | 2012-05-04 | 2012-09-19 | 奇智软件(北京)有限公司 | 一种浏览器输入控件的进程控制方法和装置 |
CN102722559A (zh) * | 2012-05-31 | 2012-10-10 | 奇智软件(北京)有限公司 | 一种异常页面的进程控制方法、装置和系统 |
CN103246552A (zh) * | 2012-02-14 | 2013-08-14 | 腾讯科技(深圳)有限公司 | 防止线程出现阻塞的方法和装置 |
CN104850460A (zh) * | 2015-06-02 | 2015-08-19 | 上海斐讯数据通信技术有限公司 | 一种服务程序线程管理方法 |
-
2016
- 2016-04-22 CN CN201610258263.1A patent/CN105975325A/zh active Pending
Patent Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1855067A (zh) * | 2005-04-28 | 2006-11-01 | 华为技术有限公司 | 一种实时操作系统中任务挂起状态监控方法 |
CN101355577A (zh) * | 2008-09-01 | 2009-01-28 | 中兴通讯股份有限公司 | 一种多线程通讯程序中防止线程吊死的方法 |
WO2011000299A1 (zh) * | 2009-07-02 | 2011-01-06 | 腾讯科技(深圳)有限公司 | 一种多页面浏览器防假死方法及装置 |
CN102375758A (zh) * | 2010-08-20 | 2012-03-14 | 联芯科技有限公司 | 移动通信设备浏览器防假死方法和装置 |
CN103246552A (zh) * | 2012-02-14 | 2013-08-14 | 腾讯科技(深圳)有限公司 | 防止线程出现阻塞的方法和装置 |
CN102681891A (zh) * | 2012-05-04 | 2012-09-19 | 奇智软件(北京)有限公司 | 一种浏览器输入控件的进程控制方法和装置 |
CN102722559A (zh) * | 2012-05-31 | 2012-10-10 | 奇智软件(北京)有限公司 | 一种异常页面的进程控制方法、装置和系统 |
CN104850460A (zh) * | 2015-06-02 | 2015-08-19 | 上海斐讯数据通信技术有限公司 | 一种服务程序线程管理方法 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US9842019B2 (en) | Proactive and adaptive cloud monitoring | |
US8943196B2 (en) | Programmatically determining an execution mode for a request dispatch utilizing historic metrics | |
US20210311813A1 (en) | Fault prediction method, apparatus and storage medium | |
US8171346B2 (en) | Client session based debugging | |
EP2204739A1 (en) | Defining a conditional breakpoint | |
CN106557369A (zh) | 一种多线程的管理方法及系统 | |
CN106844047B (zh) | 一种智能终端的应用程序优化方法 | |
US9383800B2 (en) | Managing a portal application | |
CN106598740B (zh) | 一种限制多线程程序占用cpu利用率的系统及限制方法 | |
CN114715139A (zh) | 自动泊车异常数据采集方法、装置、存储介质及产品 | |
US11379345B2 (en) | System and method for controlled data extraction in computer networks | |
CN104584650A (zh) | 管理移动设备中的功率消耗 | |
CN104536819A (zh) | 基于web服务的任务调度方法 | |
CN112379993A (zh) | 一种机器人流程自动化处理系统、方法及装置 | |
CN112783614A (zh) | 对象处理方法、装置、设备、存储介质以及程序产品 | |
KR20150130298A (ko) | 컨트랙트에 대한 운영 체제 지원 기법 | |
Franke et al. | Reverse engineering and testing service life cycles of mobile platforms | |
CN105975325A (zh) | 一种自动跳出阻塞式代码段的控制方法 | |
CN105447384B (zh) | 一种反监控的方法、系统及移动终端 | |
US8285410B2 (en) | Method for modeling and executing a production rule in a discrete manufacturing scenario | |
CN112100620A (zh) | 代码安全检测方法、装置、设备和可读存储介质 | |
US20200210307A1 (en) | Method for automatically analyzing bottleneck in real time and an apparatus for performing the method | |
CN105740064B (zh) | Linux系统中防止服务端重启的方法及装置 | |
CN110737320B (zh) | 耗电量检测方法、装置、电子设备及存储介质 | |
CN114401121A (zh) | 应用程序登录方法、装置、电子设备及可读存储介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
RJ01 | Rejection of invention patent application after publication | ||
RJ01 | Rejection of invention patent application after publication |
Application publication date: 20160928 |