tasklet

老白学编程

大兔子大兔子 提交于 2020-04-29 15:50:54
Linux 的中断 中断其实就是由硬件或软件所发送的一种称为IRQ(中断请求)的信号。 中断允许让设备,如键盘,串口卡,并口等设备表明它们需要CPU。 一旦CPU接收了中断请求,CPU就会暂时停止执行正在运行的程序,并且调用一个称为中断处理器或中断服务程序(interrupt service routine)的特定程序。 中断服务程序或中断处理器可以在中断向量表中找到,而这个中断向量表位于内存中的固定地址中。中断被CPU处理后,就会恢复执行之前被中断的程序。 在机器启动的时候,系统就已经识别了所有设备,并且也把相应的中断处理器加载到中断表中。 中断是系统用来响应硬件设备请求的一种机制,它会打断进程的正常调度和执行,然后调用内核中的中断处理程序来响应设备的请求。 中断其实是一种异步的事件处理机制,可以提高系统的并发处理能力。 例如: 当我们在键盘上按下一个按键时,键盘就会对CPU说,一个键已经被按下。在这种情况下,键盘的IRQ线路中的电压就会发生一次变化,而这种电压的变化就是来自设备的请求,就相当于说这个设备有一个请求需要处理。 硬中断和软中断 硬中断: 硬中断是由硬件产生的,比如,像磁盘,网卡,键盘,时钟等。每个设备或设备集都有它自己的IRQ(中断请求)。 基于IRQ,CPU可以将相应的请求分发到对应的硬件驱动上(注:硬件驱动通常是内核中的一个子程序,而不是一个独立的进程)。

【linux kernel】 中断处理-中断下半部【转】

时间秒杀一切 提交于 2020-04-28 03:45:10
转自: http://www.cnblogs.com/embedded-tzp/p/4453987.html 欢迎转载,转载时需保留作者信息,谢谢。 邮箱: tangzhongp@163.com 博客园地址: http://www.cnblogs.com/embedded-tzp Csdn博客地址: http://blog.csdn.net/xiayulewa 1. 概述 Linux 内核中断机制:为了在中断执行时间尽可能短和中断处理需要完成大量工作之间找到一个平衡点, Linux 将中断处理程序分解为两个半部,顶半部和底半部。 顶半部完成尽可能少的比较紧急的任务,它往往只是简单地读取寄存器中的中断状态并清除中断标志位就进行 “ 登记工作 ” ,将底半部处理程序挂到该设备的底半部执行队列中去。 那上半部和下半部是分界线是什么? 以 request_irq 注册的中断函数为分界线。 上半部: 当执行完request_irq注册的中断函数后,上半部结束。在注册的中断函数中,登记下半部要做的工作。 上半部已经讨论了: http://www.cnblogs.com/embedded-tzp/p/4451354.html 底半部实现方式有: 软中断 tasklet 工作队列 2. 软中断 http://www.cnblogs.com/embedded-tzp/p/4452041.html

linux中断处理-顶半部(top half)和底半部(bottom half) -转

余生长醉 提交于 2020-04-28 02:59:27
原文:http://rensanshi.blog.163.com/blog/static/21395510820136282224877/ 设备的中断会打断内核中进程的正常调度和运行,系统对更高吞吐率的追求势必 要求中断服务程序尽可能地短小精悍。但是,这个良好的愿望往往与现实并不吻合。 在大多数真实的系统中,当中断到来时,要完成的工作往往并不会是短小的,它可能 要进行较大量的耗时处理。 为了在中断执行时间尽可能短和中断处理需完成大量工作之间找到一个平衡点,Linux 将中断 处理程序分解为两个半部:顶半部(top half)和底半部(bottom half)。 顶半部完成尽可能少的比较紧急的功能,它往往只是简单地读取寄存器中的中断状态并清除 中断标志后就进行“登记中断”的工作。“登记中断”意味着将底半部处理程序挂到该设备的底半 部执行队列中去。这样,顶半部执行的速度就会很快,可以服务更多的中断请求。 现在,中断处理工作的重心就落在了底半部的头上,它来完成中断事件的绝大多数任务。底半部 几乎做了中断处理程序所有的事情,而且可以被新的中断打断,这也是底半部和顶半部的最大不同, 因为顶半部往往被设计成不可中断。底半部则相对来说并不是非常紧急的,而且相对比较耗时,不在 硬件中断服务程序中执行。 尽管顶半部、底半部的结合能够改善系统的响应能力,但是,僵化地认为 Linux

Linux 软中断

て烟熏妆下的殇ゞ 提交于 2020-04-09 18:15:00
中断 中断其实是一种异步的事件处理机制,可以提高系统的并发处理能力。 由于中断处理程序会打断其他进程的运行,所以,为了减少对正常进程运行调度的影响,中断处理程序就需要尽可能快地运行。如果中断本身要做的事情不多,那么处理起来也不会有太大问题;但如果中断要处理的事情很多,中断服务程序就有可能要运行很长时间。 注意: 中断处理程序在响应中断时,还会临时关闭中断。这就会导致上一次中断处理完成之前,其他中断都不能响应,也就是说中断有可能会丢失。 软中断(softirq) Linux 将中断处理过程分成了两个阶段,也就是上半部和下半部: 上半部用来快速处理中断,它在中断禁止模式下运行,主要处理跟硬件紧密相关的或时间敏感的工作。也就是我们常说的硬中断,特点是快速执行; 下半部用来延迟处理上半部未完成的工作,通常以内核线程的方式运行。也就是我们常说的软中断,特点是延迟执行。 查看软中断和内核线程 /proc/softirqs 提供了软中断的运行情况; /proc/interrupts 提供了硬中断的运行情况。 查看软中断在CPU上累计次数: // Linux 中的软中断包括网络收发、定时、调度、RCU 锁等各种类型,可以通过查看 /proc/softirqs 来观察软中断的运行情况。 // TIMER(定时中断)、NET_RX(网络接收)、SCHED(内核调度)、RCU(RCU 锁) [root

Spring Batch 小任务(Tasklet)步骤

核能气质少年 提交于 2020-02-28 03:55:08
Chunk-Oriented Processing 不是处理 step 的唯一方法。 考虑下面的一个场景,如果你仅仅需要调用一个存储过程,你可以在 ItemReader 中实现这个调用,然后在存储过程完成调用后返回 null。这种设计看起来不是那么自然也不是非常优美,因为你的批量设计中甚至都不需要实现 ItemWriter。针对这种情况,Spring Batch 为你提供了 TaskletStep 选项。 TaskletStep 是一个简单的接口,这个接口只需要实现一个方法 execute ,这个方法将会被TaskletStep多次重复的调用,直到这个方法返回 RepeatStatus.FINISHED 或者抛出异常来表示调用失败。 Tasklet 的每一次调用都会包含在事务中(Transaction)。Tasklet 的实现(implementors)可以调用一个存储过程,一个脚本或者一个简单的 SQL 更新脚本。 针对我们的实践中,我们可以使用 Tasklet 来执行一个 FTP 的任务。 将我们产生的中间文件上传到不同的 FTP 服务器上,你可以在实现中指定不同的服务器配置参数,这样更加有利于代码的重用。 为了能够创建一个 TaskletStep ,Bean 需要传递一个 tasklet 方法到构造器(builder),这个 tasklet 方法需要实现 Tasklet 接口

Spring Batch

时光毁灭记忆、已成空白 提交于 2020-02-27 00:34:39
Flow 作业流,Spring Batch 支持一个Job中配置多个Step,不同的Step可以顺序执行,也可以按照不同的条件有选择地执行(条件通常使用Step的退出状态决定),通过 next 元素 或 decision 元素 来定义跳转规;此外还允许多个step并行执行,通过 split 元素 来定义。 顺序Step 配置如: <job id="xxJob"> <step id="stepA" next="stepB"/> <step id="stepB" next="stepC"/> <step id="stepC"/> </job> 条件Step 通过 next 元素实现: 属性: on 当step的ExitStatus 和 该属性值匹配时,则执行to指定的作业步。属性值可以是任意的字符串,同时支持通配符 * ? * 表示退出状态为任何值都满足 ? 表示匹配一个字符串,如:C?T, 当退出状态为 CAT时候满足 to 指定下一个需要执行的step 示例配置如: <job id="xxJob"> <step id="stepA" next="stepB"/> <step id="stepB" > <next on="*" to="stepC"/> <next on="MY_EXIT_CODE" to="stepD"/> </step> <step id="stepC" next

How define a spring batch chunk in the tasklet with code

做~自己de王妃 提交于 2020-02-02 16:19:48
问题 I have a spring-batch xml-based configuration that should be migrated to annotation-based configuration. but I can't find any solution to define a chunk into the tasklet definition. There are my xml and code base decleration: <step id="files2Memory"> <tasklet> <chunk reader="pointFileReader" processor="pointFileProcessor" writer="pointFileWriter" commit-interval="50000"/> </tasklet> </step> public Step files2Memory() { return stepBuilders.get("files2Memory") .tasklet(new Tasklet() { @Override

How define a spring batch chunk in the tasklet with code

被刻印的时光 ゝ 提交于 2020-02-02 16:19:27
问题 I have a spring-batch xml-based configuration that should be migrated to annotation-based configuration. but I can't find any solution to define a chunk into the tasklet definition. There are my xml and code base decleration: <step id="files2Memory"> <tasklet> <chunk reader="pointFileReader" processor="pointFileProcessor" writer="pointFileWriter" commit-interval="50000"/> </tasklet> </step> public Step files2Memory() { return stepBuilders.get("files2Memory") .tasklet(new Tasklet() { @Override

Spring Batch: How to create a Composite Item Writer?

只谈情不闲聊 提交于 2019-12-08 02:16:44
问题 I am using Spring Batch in Spring Boot application. The Spring Boot version is 1.3.5.RELEASE . I am trying to use CompositeItemWriter so that the list of items will first be compressed/zipped by WriterOne and then be passed to WriterTwo where they will be written in the database. Here is my writer 1: @Component public class Writer1 implements org.springframework.batch.item.ItemWriter<SimpleObject> { @Override public void write(List<? extends SimpleObject> list) throws Exception { for

【整理】Python之JIT、Django、Greenlet和Stackless

China☆狼群 提交于 2019-12-07 04:16:31
【JIT】 即时编译(Just-in-time compilation),又称为动态编译,是一种提高程序运行效率的方法。 通常程序有两种编译方式:静态编译与动态编译(直译)。在静态编译中,程序在执行前全部被翻译为机器码,而动态直译则是边运行边翻译。 即时编译器则混合了这二者,一句一句编译源代码,但是会将翻译过的代码缓存起来以降低性能损耗。相对于静态编译代码,即时编译的代码可以处理延迟绑定并增强安全性。即时编译器有两种类型,一是字节码翻译,二是动态编译翻译。 另外,一般来讲编译执行比解释执行要快,但是编译之后又不能跨平台,那我们就到目标平台上去,先编译再执行,这样就比纯解释要快了。这种编译是在“运行”的时候自动进行的,所以叫即时编译(JIT)。 【 Django 】 Django是一个开放源代码的Web应用框架,由Python写成。采用了MVC(Model View Controller)的设计模式,M是指数据模型,V是指用户界面,C则是控制器。 它最初是被开发来用于管理劳伦斯出版集团旗下的一些以新闻内容为主的网站的。并于2005年7月在BSD许可证下发布。这套框架是以比利时的吉普赛爵士吉他手Django Reinhardt来命名的。 Django的主要目标是使得开发复杂的、数据库驱动的网站变得简单。Django注重组件的重用性和“可插拔性”,敏捷开发和DRY(Don't