首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >睡在Linux工作队列中

睡在Linux工作队列中
EN

Stack Overflow用户
提问于 2013-01-01 20:38:02
回答 1查看 3K关注 0票数 1

我只是第一次读到关于Linux内核中断处理程序底部半部的文章,并试图了解工作队列用于延迟工作的用法。

据我所知,工作队列相对于软线程或tasklet的好处是,工作是在流程上下文中完成的,因此可以休眠。但是在默认情况下,这项工作只是在一个事件/X线程上顺序完成吗?因此,如果在events/0上启动了一些工作,然后在某个IO上等待了很长一段时间,那么就不能在该处理器上处理更多的工作队列项了,这对性能来说似乎非常糟糕。

那么,如果工作可以休眠很长时间,那么所有中断处理程序开发人员都有责任不使用默认事件/X线程吗?还是我误解了什么?

EN

回答 1

Stack Overflow用户

发布于 2013-01-02 21:24:43

但是在默认情况下,这项工作只是在一个事件/X线程上顺序完成吗?因此,如果在events/0上启动了一些工作,然后在某个IO上等待了很长一段时间,那么就不能在该处理器上处理更多的工作队列项了,这对性能来说似乎非常糟糕。

这是不准确的;工作队列API既允许单线程任务,也允许多线程任务.对于前者,调用函数create_singlethread_workqueue()。

那么,如果工作可以休眠很长时间,那么所有中断处理程序开发人员都有责任不使用默认事件/X线程吗?还是我误解了什么?

在softirq (即tasklet)中,您根本无法入睡,因此,工作队列的基本好处是您可以睡觉。事实上,开发人员有责任避免导致其他k线程在出现单线程工作队列时挨饿。

还请记住,workqueue API提供的不仅仅是任务的队列/脱队列,而且还提供了用于延迟工作队列、工作间同步、刷新工作队列、取消延迟工作等的功能。与其他基于软is的库相比,这个API也是一个优势,甚至对于非睡眠的使用也是如此.

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14114023

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档