7

nodejs 里多个定时任务里用到相同的变量, 会不会有线程安全的问题?

 1 year ago
source link: https://www.v2ex.com/t/884591
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

V2EX  ›  JavaScript

nodejs 里多个定时任务里用到相同的变量, 会不会有线程安全的问题?

  bthulu · 1 小时 16 分钟前 · 112 次点击

这里在做一个制造厂内物流调度方案, 调度系统用的 js 的 setTimeout 无限循环.

每条流水线就会有一个无限循环的 setTimeout.

所有流水线上的货物, 机器设备的运行状态, 都统一保存在一个 store 中. 这些数据是从另一个与硬件直接通信的后台上定时轮询获取的.

流水线之间的货物是会相互流通的, 并且这个流水线的货物的大小状态, 会影响另一个流水线的运行状况. 因此就会出现流水线之间的调度线程访问相同设备或货物的情况, 并根据当前状态改变流水线的运行状态.

综上, 这个 store 是会在不同线程中批量或单独读取写入的, 那么, 有什么办法保证批量或单独读写的原子性吗? 还是说 js 天然就是线程安全的, 完全不用管这个?

按说 setTimeout 的回调函数都是在一个线程里执行的, 但是会不会出现某个回调函数执行一半, 碰到个 await 了, 就跳过去执行另一个回调函数, 然后再跳回来? 那这样这个带 await 的函数就被另一个函数插了一脚. 如果另一个函数访问了这个带 await 函数会修改的变量, 岂不是读到了脏数据?


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK