睡
/**
* 实现这个接口的家伙是某个“服务组件”,既然号称“服务组件”也就是能向外提供若干个长时的服务逻辑实例。
* 嗯“长时”~~~~,这里是靠轮询来搞定了。但是具体的服务逻辑还是要规范的,此方法中就定义了“所启动的”具体服务逻辑。
*
*
* 而要注意了:“所启动的具体服务逻辑”必须满足:
* 该方法中不执行任何不可控的长时逻辑:
* 1.任何可能的block都应有类似的超时返回机制去约束。(超时返回,对应的现有情况:有blocking的IO操作存在,但设置了超时)
* 2.或者可以证明此方法不可能长时间被trap住,无法返回。 (自然返回,对应的现有情况没有长时blocking的IO操作存在)
* 3.或者可以证明,即使在被trap住的情况下,仍然可以自我执行可控周期内自我状态监听,从而可以“自我引导”结束返回。 (可轮询到中止信息后返回)。
*
* 由于java对interrupt()的策略是非抢占式的,所以如果设计上考虑了线程中断的场景,那么是应该可以优雅退出的,但是关键是不知道上层业务逻辑是否很好的做了线程中断的处理。
*
*
* 长时间不返回又不可控的方法设计,是在任何一个业务层都应该尽量避免使用的,这样会造成当前执行资源无法响应设计中的系统信号,但是超时机制的加入会不会给系统造成不可忽略的效率负担呢?
*
* 永远记住:Code pass占用的执行资源不一定自家的,执行资源很可能要重用的,所以任何层面的不可控的长期占用都是应当被禁止的。否则系统结束的“优雅”目标就很难达到,因为让其他服务实例来终结当前
* 服务实例,肯定不可能做到对具体业务的无侵害。
*
*
* 使得服务实例停止的可能只有两种,第一种可能是相应的“服务组件”STOPED了,第二种可能是方法内自己举起令旗了。
* 该方法的外部轮询会尽量吸收所有异常,所以如果服务实例内部有不可解决的问题时请举起令旗自觉终止该实例。
* 我们只是尽量吸收哦,如果系统跑崩了,内存溢出了等问题不在考虑范围内~!这个还在研究中。但是真出了这种问题,更多是service内部逻辑的问题。
*
* @param currentInstance 当前服务实例的令旗,
* 如果当前服务实例是直接dispatch到一个线程的(ThreadPool也是个服务组件啊),那么在服务实例结束后,这个线程也就结束了。
* 如果是dispatch给一个线程池,那么按照线程池的语义,当前服务实例占用的线程资源就应该是被释放掉。
* 另外这个令旗应该是具有"ThreadLocal"语义的,也就是当前运行的线程“一人一份”,请用各种方式确保这点吧(最贱的方法就是在run()方法里new一个)
* @return
*/
protected abstract void doServiceRoutine(ServiceInstance currentInstance);
分享到:
相关推荐
标题中的"AT91M42800A-Interrupt-GHS3_6-2_0_AT91M42800A_"暗示了这是一个关于AT91M42800A微控制器的中断处理相关的软件包,版本号可能是GHS3.6.2.0。这个芯片是基于ARM架构的,因此涉及到的知识点首先围绕ARM处理器...
每个端口通常包括数据寄存器、方向寄存器和中断使能寄存器,允许程序员控制IO口的行为。 二、IO中断的原理 IO中断是当IO口的特定状态变化时,微控制器接收到的中断请求。例如,当一个按键被按下,连接到IO口的引脚...
"AT91SAM7S64-Interrupt-IAR4_30A-1_21"可能是项目或库的名称,表示这是针对IAR 4.30A版本的更新,版本号1.21。这个文件可能包含头文件、源代码、配置文件等,用于构建中断功能的工程。 综上所述,这个压缩包提供...
5. **中断处理**:在中断服务子程序中,程序员编写处理中断事件的代码。 6. **中断返回**:完成中断处理后,CPU弹出堆栈中的PC和PSW,恢复现场,并通过RETI指令返回到中断前的位置继续执行程序。 对于8051 C编程,...
在这篇名为"恶魔和梦魇的私语------- 关于软件开发的务虚主义对话(4)"的文章中,我们可以提取出一些关键的IT知识点,主要涉及软件开发中的编程语言特性和技术趋势。 首先,讨论提到了.NET框架和GJ(Generic Java)...
接着,展开`ralf-brown-interrupt-list-master`这个压缩包文件,我们可以找到包含清单的文本文件或其他格式的文档。这些文件通常以易于阅读的格式呈现,可能还包含示例代码和注释,帮助用户更好地理解中断处理的过程...
通过指定使用哪一组寄存器,程序员可以确保不同中断服务程序之间互不干扰。 - **using 2**:这里的数字2指定了使用第2组工作寄存器。在实际编写代码时,可以使用如下格式: ```c void timer0() interrupt 1 using...
这个列表由Ralf Brown维护,是程序员、系统工程师和硬件爱好者在处理中断相关问题时不可或缺的工具。在这个压缩包中包含的文件"Ralf Brown Interrupt List.HLP"是一个帮助文件,提供了丰富的中断描述和相关数据。 ...
在汇编程序中,程序员会定义中断向量,并指定相应的中断处理子程序。 5. **中断处理**:处理器跳转到中断处理程序执行,处理中断事件。这可能包括与外部设备交互、更新系统状态或者执行特定操作。 6. **恢复现场**...
根据提供的文件信息,我们可以整理出一系列关于SCJP(Sun Certified Programmer for the Java Platform)认证考试中的关键知识点。这些知识点覆盖了Java语言的基础概念、数据类型、面向对象编程原则、异常处理等多个...
这个列表是程序员、系统开发者以及硬件爱好者研究和调试DOS程序的重要参考资料。 DOS中断大全主要包含以下几类知识点: 1. **BIOS中断**:这些中断是计算机启动后最先可用的服务,提供了与硬件交互的基本接口,如...
总的来说,嵌入式C语言教程不仅是关于语言本身,更是关于理解硬件、操作系统内核和系统级编程的综合。通过深入学习,你可以成为一名能够编写高效、可靠、适应各种嵌入式平台的C语言程序员。这两个PDF文件,"嵌入式...
标题中的"PIC32-int.rar_Pic32 interrupt_pic32_pic32 函数"表明这是一个关于PIC32微控制器中断处理的资源包,其中包含了与中断相关的函数和程序。这个压缩包很可能是为开发者提供关于如何在PIC32芯片上实现中断服务...
飞思卡尔单片机的程序,是大学老师和学生的不错选择,也是程序员的选择,也是期末考试时的必备法宝,你们一定会考的试题,虽然基础但又有难度,故飞思卡尔c语言和汇编程序在此。我不知道够不够50自,如果不够就算了...
### 黑马程序员入学Java知识 #### Java概述与基础知识 1. **何为编程?** - 编程是通过特定的计算机语言来编写指令,让计算机能够执行一系列任务的过程。 2. **Java语言概述,历史、特点** - Java是一种广泛...
`io.h`头文件可能包含了定义I/O函数的原型,比如`read()`和`write()`,这些函数允许程序员直接操作文件描述符来读写数据。此外,可能还包括其他I/O控制函数,如`open()`用于打开文件,`close()`用于关闭文件,以及`...
Java的`interrupt()`方法在多线程编程中扮演着重要的角色,它允许程序员通知一个线程,它的执行应该被中断。然而,理解`interrupt()`方法的正确使用方式至关重要,因为直接调用`interrupt()`并不总是能立即停止线程...