zoukankan      html  css  js  c++  java
  • 七、create_workqueue和create_singlethread_workqueue

    工作队列是一种可以将我们的工作推后执行的一种机制,在大部分时候,我们并不需要自己建立新的工作队列,而只需要定义工作就可以了,但是还是有必要了解工作队列的创建步骤如下:

    1.先定义一个工作队列
    static struct workqueue_struct *my_workqueue = NULL;
    2.定义一个工作任务
    static struct work_struct my_work;//这个任务就是我们需要推后执行的动作
    3.定义工作队列调用函数
    void work_func(struct work_struct *work)
    {
        /*推后执行的操作,比如数据处理等*/  
    }
    4.初始化工作队列
    static int __init xxx_init(void)
    {
        my_workqueue= create_workqueue("my_workqueue");    /*创建工作队列workqueue_struct,该函数会为cpu创建内核线程*/ 
    INIT_WORK(
    &my_work,work_func);              /*初始化工作work_struct,指定工作函数*/
    queue_work(test_wq,
    &work);                /*将工作加入到工作队列中,最终唤醒内核线程(比较常见的使用场景是在中断上半部去唤醒内核线程)*/
        return 0;
    }
    static void __exit xxx_exit(void)
    {
        
    }

    以上就是create_workqueue创建的一般步骤,create_singlethread_workqueue的创建同理。

    虽然创建相同,但是create_workqueue和create_singlethread_workqueue还是有细小的差别的。

    create_workqueue创建工作队列时在每个cpu上都创建了worker_thread内核线程,worker_thread线程处理的事务能够并行化,而使用create_singlethread_workqueue创建的工作队列,即使对于多cpu的系统,只在一个cpu上创建worker_thread内核线程。


  • 相关阅读:
    GitLab用户权限管理
    类似vant中的tab实现
    Gitgitee/github/gitlab账号分离
    Vim操作
    partition by 用法
    crontab执行feat_gen.sh时,报错找不到pyspark
    SQL同一个字段出现null和0值,有何区别,原因是什么?left join导致null值出现,case when导致0值出现
    linux 定时任务crontab的用法
    卡方检验
    ROC与AUC
  • 原文地址:https://www.cnblogs.com/timemachine213/p/12881486.html
Copyright © 2011-2022 走看看