[内核]Takslet和Workqueue的应用场景

转自:http://blog.chinaunix.net/uid-20382483-id-4077101.html


tasklet


Workqueue


处于atomic context,不能sleep


不处于atomic context,可以sleep


处于中断上下文,OS不可以进行进程调度


处于进程上下文,OS可以进行进程调度


运行调度它们的同一个CPU上


默认同一个CPU上


不能指定确定时间进行调度


不能指定确定时间进行调度或者指定至少延时一个确定时间后调度


只能交给ksoftirqd/0


可以提交给events/0,也可以提交给自定义的workqueue


Tasklet函数带参数


Work函数不带参数

Tasklet与workqueue的不同应用环境总结如下:

  • [极少量任务]:必须立即进行紧急处理的极少量任务放入在中断的顶半部中,此时屏蔽了与自己同类型的中断,由于任务量少,所以可以迅速不受打扰地处理完紧急任务。
  • [中等数量任务]:需要较少时间的中等数量的急迫任务放在tasklet底半部中。此时不会屏蔽任何中断(包括与自己的顶半部同类型的中断),所以不影响顶半部对紧急事务的处理;同时又不会进行用户进程调度,从而保证了自己急迫任务得以迅速完成。
  • [大量任务]:需要较多时间且并不急迫(允许被操作系统剥夺运行权)的大量任务放在workqueue中。此时操作系统会尽量快速处理完这个任务,但如果任务量太大,期间操作系统也会有机会调度别的用户进程运行,从而保证不会因为这个任务需要运行时间将其它用户进程无法进行。
  • 可能引起睡眠的任务放在workqueue中,因为在workqueue中睡眠是安全的。
时间: 2024-11-07 16:14:05

[内核]Takslet和Workqueue的应用场景的相关文章

Linux内核工程导论——进程

进程 进程调度 概要 linux是个多进程的环境,不但用户空间可以有多个进程,而且内核内部也可以有内核进程.linux内核中线程与进程没有区别,因此叫线程和进程都是一样的.调度器调度的是CPU资源,按照特定的规则分配给特定的进程.然后占有CPU资源的资源去申请或使用硬件或资源.因此这里面涉及到的几个问题: 对于调度器来说: l  调度程序在运行时,如何确定哪一个程序将被调度来使用CPU资源? n  如何不让任何一个进程饥饿? n  如何更快的定位和响应交互式进程? l  单个CPU只有一个流水线

Concurrency Managed Workqueue(一)workqueue基本概念

一.前言 workqueue是一个驱动工程师常用的工具,在旧的内核中(指2.6.36之前的内核版本)workqueue代码比较简单(大概800行),在2.6.36内核版本中引入了CMWQ(Concurrency Managed Workqueue),workqueue.c的代码膨胀到5000多行,为了深入的理解CMWQ,单单一份文档很难将其描述的清楚,因此CMWQ作为一个主题将会产生一系列的文档,本文是这一系列文档中的第一篇,主要是基于2.6.23内核的代码实现来讲述workqueue的一些基本

Linux内核架构与底层--读书笔记

linux中管道符"|"的作用 命令格式:命令A|命令B,即命令1的正确输出作为命令B的操作对象(下图应用别人的图片) 1. 例如: ps aux | grep "test"  在 ps aux中的結果中查找test. 2. 例如:   find . -name "*.txt" | xargs grep "good" -n --color=auto   把find的结果当成参数传入到grep中,即在那些文件内部查找good关键

高并发高性能场景(抢购、秒杀、抢票、限时竞答)解决方案

技术指标: PV(Page View, 页面浏览量)在千万级别QPS(Query Per Second, 每秒处理请求数)在百万级别数据量在千亿级别接口响应速度不能超过150毫秒用户提交请求到页面呈现不能超过3秒 架构设计:1. 从LAMP架构转为面向服务架构(服务可以用多种开发语言实现,不受一种开发语言限制)2. 对海量数据做Sharding分片,分库分表3. 从有状态服务改为无状态接口服务(便于分布式部署)4. 精心设计的数据层(存储.压缩.索引)5. 分布式系统最终瓶颈(CPU.内存.存储

linux内核同步之信号量、顺序锁、RCU、完成量、关闭中断【转】

转自:http://blog.csdn.net/goodluckwhh/article/details/9006065 版权声明:本文为博主原创文章,未经博主允许不得转载. 目录(?)[-] 一信号量 信号量的概念 信号量的数据结构和相关API 数据结构 初始化 获取和释放信号量 读写信号量的概念 读写信号量的数据结构 二顺序锁 顺序锁的概念 数据结构 写操作 读操作 三Read-Copy Update RCU 写操作 读操作 释放旧的版本 四完成量Completions 完成量的概念 数据结构

“百变”Redis带你见识不同场景下的产品技术架构

摘要: 2018飞天技术汇24期-云数据库Redis产品发布会,由阿里云数据库技术组技术专家王欢.怀听.梁盼分别带来以"Redis全球多活产品"."Redis混合存储产品"."Redis多线程性能增强版"为题的演讲,本文对Redis进行了简单的介绍,进而针对不同的应用场景研制出不同的产品,并对不同产品分别进行了详细地介绍.2018飞天技术汇24期-云数据库Redis产品发布会,由阿里云数据库技术组技术专家王欢.怀听.梁盼分别带来以"Re

Linux内核模块编程可以使用的内核组件

2.2.2 在阅读<深入Linux内核架构与底层原理> 作者:刘京洋 韩方,发现一些错误,有些自己的理解,特以此记录 1.工作队列(workqueue) 队列是一种可以先进先出的数据结构,常常用来将一些工作任务缓冲的情况中.在linux下的workqueue可以用来处理内核中的任务链. linux内核有workqueue,用户可以实现自己的workqueue,如果需要workqueue时,都临时创建,会导致系统开销大,为了减少开销,内核使用了workqueue的线程池的技术,将创建好的work

Linux内核实战(一)- 学习路线规划

1 抛弃旧文化,迎接Linux命令新文化 Linux第一步,从Windows思维,切换到Linux的"命令行+文件"模式 在Linux中,做什么都有相应命令.一般就在bin或者sbin目录下,数量繁多.如果你事先不知道该用哪个命令,很难通过枚举的方式找到.因此,在这样没有统一入口的情况下,就需要你对最基本的命令有所掌握. 一旦找到某个命令行,替代输入框的是各种各样的启动参数. 这些参数怎么填, 一般可以通过 -h 查看help,就能找到相应的配置项 还可以通过man命令,查看文档 无论

linux kernel的中断子系统之(九):tasklet

一.前言 对于中断处理而言,linux将其分成了两个部分,一个叫做中断handler(top half),属于不那么紧急需要处理的事情被推迟执行,我们称之deferable task,或者叫做bottom half,.具体如何推迟执行分成下面几种情况: 1.推迟到top half执行完毕 2.推迟到某个指定的时间片(例如40ms)之后执行 3.推迟到某个内核线程被调度的时候执行 对于第一种情况,内核中的机制包括softirq机制和tasklet机制.第二种情况是属于softirq机制的一种应用场