SSM+Vue构建客车票务系统的技术实践
2026/8/4 1:55:45
你可以把 spin 的底层原理想象成一个“智能的、会休眠的调度中心”:
它进入一个无限循环,但每次循环都会先“闭上眼睛睡觉”(wait_for_work 阻塞等待)。只有当底层网络(DDS)拍一拍它说“有新消息来了”,它才会“睁开眼睛”,精准地抓取一个任务执行,处理完后,如果没别的事,它又会继续“闭上眼睛睡觉”。
本质上就是一个事件池,循环读取事件池中的人物进行触发。
而spin_once则是只读取一帧事件池中的事件。
[主程序] [执行器 Executor] [底层中间件 DDS / Wait Set] | | | |--- 1. spin(node) ->| | | | | | |--- 2. collect_entities() ----->| (收集节点所有的订阅、定时器、服务等句柄) | | | | |--- 3. 进入 while 无限循环 --->| | | | | |--- 4. 构建/更新 Wait Set ---->| (将收集到的句柄注册到 Wait Set 中) | | | | |--- 5. wait_for_work() ------->| (⚠️ 核心阻塞点:线程在此挂起休眠) | | | | | |--- [事件发生:收到新消息/定时器到期] | | | | |<-- 6. 唤醒线程,返回就绪句柄 --| | | | | |--- 7. get_next_executable() -->| (按优先级寻找下一个可执行任务) | | | | |--- 8. execute_any_executable()| (