这里在做一个制造厂内物流调度方案, 调度系统用的 js 的 setTimeout 无限循环.
每条流水线就会有一个无限循环的 setTimeout.
所有流水线上的货物, 机器设备的运行状态, 都统一保存在一个 store 中. 这些数据是从另一个与硬件直接通信的后台上定时轮询获取的.
流水线之间的货物是会相互流通的, 并且这个流水线的货物的大小状态, 会影响另一个流水线的运行状况. 因此就会出现流水线之间的调度线程访问相同设备或货物的情况, 并根据当前状态改变流水线的运行状态.
综上, 这个 store 是会在不同线程中批量或单独读取写入的, 那么, 有什么办法保证批量或单独读写的原子性吗? 还是说 js 天然就是线程安全的, 完全不用管这个?
按说 setTimeout 的回调函数都是在一个线程里执行的, 但是会不会出现某个回调函数执行一半, 碰到个 await 了, 就跳过去执行另一个回调函数, 然后再跳回来? 那这样这个带 await 的函数就被另一个函数插了一脚. 如果另一个函数访问了这个带 await 函数会修改的变量, 岂不是读到了脏数据?
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.