欢迎光临
我们一直在努力

上位机架构:多线程、固定频率循环与实时性陷阱——用实测数据看清 GIL、垃圾回收、锁与调度

本文是专栏《机器人人机交互与控制实践》第 8 篇。前面几篇反复出现“输入线程”“网络线程”“固定频率循环”“界面卡住”,这一篇专门讨论上位机程序本身的架构。

上位机的实时性问题有一个共同特征:平均值看起来一切正常,问题藏在尾部。循环平均周期是 10.0 ms,但每隔几秒有一拍晚了 300 ms;CPU 占用只有 15%,但某个线程每一拍都晚 5 ms。机器人表现为偶尔“顿一下”,现场很难复现,日志里也看不出什么。

本文的方法是:先定义一个可以测量的指标,然后用实验逐一量化上位机常见的实时性杀手:循环写法、时钟选择、GIL、垃圾回收、锁与 I/O、操作系统调度,最后给出进程和线程的划分方案。

先说清楚两点前提:

  • 上位机不承担硬实时任务。需要严格保证时序的控制回路应该放在 MCU 上(第 7 篇);上位机的抖动应该只影响操作的平顺性,而不影响安全。但“软实时”不等于“随便”,一次 300 ms 的停顿,足以让操作员失去对机器人的控制感;
  • 本文所有实验都是实测:Linux,Python 3.12,只有 1 个 CPU 核。单核环境会放大线程和进程之间的竞争,多核机器上部分数字会更好看,但结论的方向不变。Windows 上的差异会单独说明。

1. 先定义要测什么:迟到量

固定频率循环的每一拍都有一个“应该开始的时刻”,迟到量就是实际开始时刻减去应该开始的时刻

赞(0)
未经允许不得转载:171主机测评 » 上位机架构:多线程、固定频率循环与实时性陷阱——用实测数据看清 GIL、垃圾回收、锁与调度
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址