• 内核工作队列


    1.概述

      Linux中的工作队列机制就是为了简化内核线程的创建。通过调用workqueue的接口就能创建内核线程,并可以根据当前系统cpu的个数创建线程的数量。工作队列是一中将工作推后执行的形式。把工作推后,交由一个内核线程执行。允许被重新调度,甚至是睡眠。共分为三种形式:

      - 共享工作队列:Linux内核为了方便用户编程,默认实现了一个所有进程都可以使用的工作队列。

      - 自定义内核工作队列:为了避免工作不能及时被执行。但过多的自定义工作队列会给系统造成过大的开销

      - 延时工作队列:当调用调度函数后,要延时一段时间才会执行工作函数

    2.内核共享工作队列:

      - API:

        * DECLARE_WORK:静态定义work_struct结构

        * INIT_WORK:动态初始化work_struct结构

        * schedule_work:对工作进行调度

      - 内核共享工作队列使用步骤

        * 编写工作函数代码

        * 定义一个struct work_struct结构

        * 在适当地方使用schedule_work调度工作

    3.自定义内核工作队列

      API:

        * create_workqueue:创建一个工作队列,为系统中的每个cpu都创建一个内核线程

        * create_singlethread_workqueue:只为当前cpu创建一个内核线程

        * queue_work:调度执行一个指定workqueue中的任务

        * destroy_workqueue:释放workqueue队列

    4.延时工作队列

      API:

        * DECLARE_DELAYED_WORK:静态定义struct delayed_work结构

        * INIT_DELAYED_WORK:动态初始化struct delayed_work

        * schedule_delayed_work:调度指定内核共享延时workqueue中的任务

        * queue_delayed_work_on:调度执行内核共享延时中的任务

    5.内核微线程tasklet

      - 简介:

        tasklet机制是中断处理下半部分最常用的一种方法。

      - API:

        * DECLARE_TASKLET:静态定义struct tasklet_struct,激活状态

        * DECLARE_TASKLET_DISABLED:静态定义taskled_struct结构,禁止状态

        * tasklet_init:初始化tasklet_struct结构体,用于动态创建

        * tasklet_disable:禁止某个指定的tasklet小任务

        * tasklet_enable:使能某个tasklet小任务

        * tasklet_schedule:调度tasklet

        * tasklet_kill:将一个已经被调度的tasklet杀死,即将其恢复到未调度的状态

      - 编程步骤

        * 定义tasklet工作函数:struct tasklet_struct mytasklet

        * 定义tasklet结构变量:DECLARE_TASKLET_DISABLED

        * 初始化tasklet结构,绑定工作函数:tasklet_init

        * 在适当地方调度工作函数:taskelt_schedule

        * 销毁tasklet:tasklet_kill

  • 相关阅读:
    浏览器缓存学习
    文件上传
    compass与css sprite(雪碧图)
    记录一下删除过长目录的方法
    JavaScript学习之 倒计时
    HTML/CSS学习之 三列布局,其中左侧和右侧的部分宽度固定,中间部分宽度随浏览器宽度的变化而自适应变化
    JavaScript学习之setTimeout
    JavaScript实现,控制一个文本框只能输入正整数,如输入不符合条件则文本框全部字体标红
    关于本地文件请求json文件
    CSS3+HTML5特效9
  • 原文地址:https://www.cnblogs.com/Mr-ox/p/6409122.html
Copyright © 2020-2023  润新知