zoukankan      html  css  js  c++  java
  • 内核工作队列

    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

  • 相关阅读:
    MongoDB mongod.log "connection refused because too many open connections" 处理方法
    12C RAC 故障分析
    Linux(Redhat 7.6)安装PG(Postgresql 9.6.0)
    OGG异构平台安装部署 MySQL->Oracle
    Redhat 7安装Oracle 11.2.0.4 RAC 数据库软件中报错:Error in invoking target 'agent nmhs' of makefile
    Redhat 7.6安装11G RAC GI时遇到此类报错
    Oracle 19.3 RAC on Redhat 7.6 安装最佳实践
    RAC环境中某数据文件(非system表空间)创建在本地,不停机迁移到ASM磁盘中
    python 多线程
    go博客大全
  • 原文地址:https://www.cnblogs.com/Mr-ox/p/6409122.html
Copyright © 2011-2022 走看看