linux内核中,工作队列和线程有什么区别?
工作队列是一种下半部分、下半部分的中断处理,它强调了动态的概念,即工作是关键,队列是第二部分。
等待队列是一种“任务队列”。它可以将一些进程置于休眠状态并等待事件发生。它更强调静态,关注的是队列,也就是说,它是一个队列。如何调度队列以及何时调度队列并不重要。等待队列在内核中有很多用途,特别是在中断处理、进程同步和定时方面。只是流程通常必须等待某些事件发生。例如,等待磁盘操作终止、等待释放系统资源或等待固定的时间间隔。等待队列实现对事件的条件等待。希望等待特定事件的进程被放入相应的等待队列并放弃控制。所以。等待队列表示一组休眠进程。当条件为真时,内核唤醒进程。等待队列由循环列表实现,其元素包括指向进程描述符的指针。每个等待队列都有一个等待队列头。waitingqueueheader是waitqueueheadt数据结构类型的队列。等待队列列表的每个元素表示一个睡眠进程,它等待事件发生,描述符地址存储在任务字段中。但是,有时很难唤醒等待队列中的所有进程。例如,如果两个或多个进程正在等待对要释放的资源的互斥访问,则只唤醒其中一个等待队列是有意义的。此进程占用资源,而其他进程可以使用declarewaitqueue继续休眠。head(name)宏定义了一个新的等待队列。宏静态声明并初始化名为name的等待队列头变量。inituwaitqueueuqueuehead()函数可用于初始化队列uwaitqueue()可以静态创建,也可以使用inituwaitqueueuuhead()动态创建。进程被放入等待队列并设置为不可执行状态。工作队列,它允许内核代码请求在将来某个时间调用函数。工作队列的作用是延迟工作并让内核线程执行。更直接地说,它编写一个函数。如果您不想现在执行它,并且需要在将来的某个时间执行它,则必须使用工作队列。如果需要使用可以重新安排的实体来执行处理的后半部分,还应该使用工作队列。是唯一可以在流程上下文的较低部分实现的机制。这意味着当您需要获取大量内存、需要获取信号量、需要执行阻塞i/o操作时,它非常有用。
线程池与mq的区别?
mq是消息队列的缩写,线程池是方便多线程编程的组件。
原文标题:两个线程读写同一个队列 linux内核中,工作队列和线程有什么区别?,如若转载,请注明出处:https://www.tzjingsheng.com/news/47501.html
免责声明:此资讯系转载自合作媒体或互联网其它网站,「豪运号」登载此文出于传递更多信息之目的,并不意味着赞同其观点或证实其描述,文章内容仅供参考。