javascript - 跨程序/线程共享变量的最佳方式?
问题描述
我目前有一个程序运行一个处理实时数据的算法,并且每小时运行一次根据新的历史数据优化算法参数的函数。
由于这是在单个线程中运行的,所以当优化器运行时,它会暂停实时数据处理算法,但它只需要大约一分钟,所以没问题。
但是,我想大大扩展优化器,它会真正增加运行时间。所以我正在考虑将它分离到它自己的程序中。然后它将在自己的线程中运行,并且不会中断算法的执行。
为了和算法共享优化器的结果,我想我会在每次运行优化器时将它们保存到一个文件中,然后算法可以定期读取该文件。
我如何确保算法不会在优化器写入该文件的同时尝试读取该文件?操作系统文件系统是否已经不允许这样做?
此外,是否有更好的方法在不同程序之间共享变量?或者将优化器拆分到同一程序中的单独线程中会更好吗?任何建议将不胜感激,谢谢!
解决方案
首先要在程序之间共享变量,您必须考虑使用命名管道。
如果你想使用命名管道以外的任何东西,也许只是一个普通文件,你必须处理竞争条件或从文件中读取错误数据,你必须实现一个锁定机制,也许是一个锁定文件,如果你要写入文件,您创建一个锁定文件,读取文件的例程将检查锁定文件是否存在,如果锁定文件存在则不会从中读取,当写入文件的例程完成时,您可以删除它。
您还可以使用该cluster
模块,您可以轻松地在两个进程(子进程和父进程)之间进行通信,而无需创建文件。
推荐阅读
- python - 将条件 RANK 窗口函数从 SQL 转换为 Pandas
- python-3.x - 使用 python 截屏时遇到问题
- php - socket_read() 无法从对等 php 重置的套接字 104 连接中读取
- node.js - 访问作为服务器运行的节点 js 代码的日志
- c# - 如何将表情符号从机器人发送给 Microsoft 团队中的用户
- node.js - 如何在猫鼬中插入或创建或保存时设置默认值
- xml - 嗨,我有一些工人记录,我需要将它们按公司分组,并按团队成员角色进行拆分
- jgrasp - 无法使用 JGrasp 打开 .class 文件
- java - 从数组中删除重复项
- sql-server - 如何防止 CTE 执行直到达到或不存在