Multithreading 为什么工作队列线程需要轮询?

Multithreading 为什么工作队列线程需要轮询?,multithreading,embedded,rtos,Multithreading,Embedded,Rtos,Nuttx工作线程(LP和HP)具有轮询间隔,仅适用于工作线程0。我想知道为什么需要一个轮询间隔 当有人将新工作排入工作队列时,工作线程将收到处理该工作的信号。如果所有工作线程都很忙,则当线程完成当前工作并再次检查队列时,将处理排队的工作 关于sched_garbage_collection()工作,工作线程由sched_signal_free()发出信号 那么,当需要轮询间隔时会发生什么情况呢?似乎信号足够好,可以确保工作线程总是被踢到处理工作。不需要轮询。它只是一个故障保护。我担心失去通知信

Nuttx工作线程(LP和HP)具有轮询间隔,仅适用于工作线程0。我想知道为什么需要一个轮询间隔

当有人将新工作排入工作队列时,工作线程将收到处理该工作的信号。如果所有工作线程都很忙,则当线程完成当前工作并再次检查队列时,将处理排队的工作

关于sched_garbage_collection()工作,工作线程由sched_signal_free()发出信号


那么,当需要轮询间隔时会发生什么情况呢?似乎信号足够好,可以确保工作线程总是被踢到处理工作。

不需要轮询。它只是一个故障保护。我担心失去通知信号的后果。这当然是一个bug,因为我不知道有这样的bug,所以我不得不说轮询是不必要的,是对CPU周期的浪费


另一个问题是投票的默认速率,我记得,50毫秒。这是速率较高的活动之一,也是优先级最高的任务。你可以将其设置为更低的利率。如果您想添加一个选项来禁用轮询,这可能也是一件好事。

我对NuttX不太熟悉,但无法找到您在文档中描述的行为的任何参考-添加引用或示例。您使用的许多术语没有出现在文档中,或者以不同的方式使用。当您谈到“工作线程”时,您实际上是指“工作队列”?工作线程是Nuttx自己创建的线程,用于处理排队进入“工作队列”的工作。Nuttx core本身有两个工作队列,一个低优先级队列和一个高优先级队列。这两个队列都绑定到一个或多个工作线程。