使用 AynscSpinner 处理来自两个订阅者的回调

Using AynscSpinner to process callbacks from two subscribers

提问人:code_monkey 提问时间:8/24/2022 更新时间:8/24/2022 访问量:161

问:

我查看了 AsyncSpinner,想检查我的理解是否正确。给定两个回调注册到一个订阅者并注册到另一个不同的订阅者,订阅 sub1 中消息的频率远高于 中。我们可能有一个全局回调队列,如 .此外,处理时间很长。即使我们使用 AsyncSpinner,进程是否仍然会卡住,因为 ROS 默认会阻止在一个订阅者中注册的回调被多个线程同时调用。例如,我们有 4 个线程,但有 3 个线程处于空闲状态,等待 1 个线程完成执行,因为其他线程可用的下一个回调仍然是 。因此,该进程仍然卡住,并且行为类似于单线程旋转,因为其他线程必须在一个线程处理时等待。我的理解正确吗?cb1sub1cb2sub2sub2[cb1, cb1, cb1, cb1, cb2, cb1, cb1, cb1, cb1]cb1cb1cb1cb1

C++ 多线程 回调 ROS

评论


答:

0赞 Fruchtzwerg 8/24/2022 #1

本声明所述:

异步微调器尝试调用 在速率允许的范围内以最快的速度回拨队列。如果回调已经 在进程中(通过另一个线程),是 .这 表示稍后将开始新的尝试。CallResultTryAgain