博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
工作队列 (二) 杂谈
阅读量:4285 次
发布时间:2019-05-27

本文共 1406 字,大约阅读时间需要 4 分钟。

  • 工作队列是什么
工作队列 实际上就是 一个 内核线程维护了 一个 工作包队列, 这个线程叫做工作者线程然后 其他的内核线程或者中断处理程序 只需要创建 工作包, 然后 插入到工作包队列中, 并唤醒  工作者 线程此时 工作者线程就是一股脑的 开始 把工作包 队列 中 的 工作包 全部给 干完,干完就睡觉例如 你扔进去 一个 包 : 包名叫做 写一个 linux 内核, 然后 工作者醒了之后,就开始 写 linux 内核, 写完了之后就开始睡觉.当然写linux内核期间也是可以小憩的(工作者线程被调度出去).
  • 为什么内核要设计工作队列
//TODOLinux中的Workqueue机制就是为了简化内核线程的创建。通过调用workqueue的接口就能创建内核线程。并且可以根据当前系统CPU的个数创建线程的数量,使得线程处理的事务能够并行化。workqueue是内核中实现简单而有效的机制,他显然简化了内核daemon的创建,方便了用户的编程.工作队列(workqueue)是另外一种将工作推后执行的形式.工作队列可以把工作推后,交由一个内核线程去执行,也就是说,这个下半部分可以在进程上下文中执行。最重要的就是工作队列允许被重新调度甚至是睡眠
  • 工作者线程什么时候被调度
//TODO
  • 工作队列运行空间
工作队列运行在 内核空间, 不涉及任何用户空间的事情
  • 工作队列 使用的内核技术
内核线程    kthread_create调度    wake_up_process
  • 工作队列和 中断 有什么关系
一般工作队列机制会被用作 中断的底半部
  • 工作队列和 中断线程化有什么关系
工作队列中的线程是 普通线程create_workqueue    alloc_workqueue        __alloc_workqueue_key            rescuer->task = kthread_create(rescuer_thread, rescuer, "%s", wq->name);中断线程化中的线程是  实时线程,优先级是 50request_threaded_irq    __setup_irq        struct task_struct *t;        static const struct sched_param param = {
.sched_priority = MAX_USER_RT_PRIO/2, }; t = kthread_create(irq_thread, new, "irq/%d-%s", irq, new->name); sched_setscheduler_nocheck(t, SCHED_FIFO, &param); 工作者线程 和 中断线程化的线程 都是在 进程上下文中,因为他们都由 task_struct 结构体表示
  • 重要的工作者线程有哪些
init_workqueues 中创建的 工作者线程    system_wq = alloc_workqueue("events", 0, 0);

转载地址:http://waigi.baihongyu.com/

你可能感兴趣的文章
SSD检测几个小细节
查看>>
Kalman实际应用总结
查看>>
linux+eclipse+lua
查看>>
Linux下常见问题的解决方法
查看>>
C语言学习笔记
查看>>
Linux下设计并发网络程序
查看>>
android 多渠道打包---使用python 3.3.2
查看>>
python学习笔记
查看>>
ubuntu下lua的安装
查看>>
linux phpmyadmin
查看>>
cocos2d-x lua开发
查看>>
lua学习笔记
查看>>
巴科斯范式(BNF)
查看>>
cocos2d-x lua
查看>>
php protobuffer
查看>>
google play in app billing
查看>>
cakephp发送post请求
查看>>
android ant
查看>>
Cocos2d-x PluginX (一)使用
查看>>
大神提供的C++ SHA1,为了能够加密字符串,我加了两个方法
查看>>