首页 > 解决方案 > 跨程序/线程共享变量的最佳方式?

问题描述

我目前有一个程序运行一个处理实时数据的算法,并且每小时运行一次根据新的历史数据优化算法参数的函数。

由于这是在单个线程中运行的,所以当优化器运行时,它会暂停实时数据处理算法,但它只需要大约一分钟,所以没问题。

但是,我想大大扩展优化器,它会真正增加运行时间。所以我正在考虑将它分离到它自己的程序中。然后它将在自己的线程中运行,并且不会中断算法的执行。

为了和算法共享优化器的结果,我想我会在每次运行优化器时将它们保存到一个文件中,然后算法可以定期读取该文件。

我如何确保算法不会在优化器写入该文件的同时尝试读取该文件?操作系统文件系统是否已经不允许这样做?

此外,是否有更好的方法在不同程序之间共享变量?或者将优化器拆分到同一程序中的单独线程中会更好吗?任何建议将不胜感激,谢谢!

标签: javascriptnode.jsmultithreadingfileexpress

解决方案


首先要在程序之间共享变量,您必须考虑使用命名管道。

如果你想使用命名管道以外的任何东西,也许只是一个普通文件,你必须处理竞争条件或从文件中读取错误数据,你必须实现一个锁定机制,也许是一个锁定文件,如果你要写入文件,您创建一个锁定文件,读取文件的例程将检查锁定文件是否存在,如果锁定文件存在则不会从中读取,当写入文件的例程完成时,您可以删除它。

您还可以使用该cluster模块,您可以轻松地在两个进程(子进程和父进程)之间进行通信,而无需创建文件。


推荐阅读