Nuttx:为什么工作队列线程需要轮询?
Nuttx: why is polling required for work queue threads?
Nuttx 工作线程(LP 和 HP)有轮询间隔,仅适用于工作线程 0。我想知道为什么需要轮询间隔?
当有人将新工作放入工作队列时,将通知工作线程处理它。如果所有工作线程都忙,则当线程完成当前工作并再次检查队列时,将处理排队的工作。
关于 sched_garbage_collection() 工作,工作线程由 sched_signal_free() 发出信号。
那么需要轮询间隔是什么情况呢?信号似乎足以确保始终启动工作线程来处理工作。
不需要轮询。它只是作为故障保险。如果通知信号丢失,我担心后果。那当然是一个错误,因为我知道没有这样的错误,我不得不说轮询是不必要的并且浪费了 CPU 个周期。
另一个问题是轮询的默认速率,我记得是 50 毫秒。事实证明,这是一项频率较高的活动,也是最高优先级的任务。您可以将其设置为低得多的速率。如果您想添加一个选项来禁用轮询,那可能也是一件好事。
Nuttx 工作线程(LP 和 HP)有轮询间隔,仅适用于工作线程 0。我想知道为什么需要轮询间隔?
当有人将新工作放入工作队列时,将通知工作线程处理它。如果所有工作线程都忙,则当线程完成当前工作并再次检查队列时,将处理排队的工作。
关于 sched_garbage_collection() 工作,工作线程由 sched_signal_free() 发出信号。
那么需要轮询间隔是什么情况呢?信号似乎足以确保始终启动工作线程来处理工作。
不需要轮询。它只是作为故障保险。如果通知信号丢失,我担心后果。那当然是一个错误,因为我知道没有这样的错误,我不得不说轮询是不必要的并且浪费了 CPU 个周期。
另一个问题是轮询的默认速率,我记得是 50 毫秒。事实证明,这是一项频率较高的活动,也是最高优先级的任务。您可以将其设置为低得多的速率。如果您想添加一个选项来禁用轮询,那可能也是一件好事。