gpt4 book ai didi

javascript - 一次只允许一个异步操作

转载 作者:数据小太阳 更新时间:2023-10-29 05:28:46 24 4
gpt4 key购买 nike

我正在构建一个站点,一个特定的操作会触发一个较长的服务器端进程运行。这个操作不能同时运行两次,所以我需要实现某种保护。它也不能同步,因为服务器在运行时需要继续响应其他请求。

为此,我构建了这个小型概念测试,使用 sleep 5 代替我实际的长时间运行的进程(需要 expresschild -process-promise,在带有 sleep 命令的系统上运行,但替换为 Windows 的任何命令):

var site = require("express")();
var exec = require("child-process-promise").exec;

var busy = false;

site.get("/test", function (req, res) {
if (busy) {
res.json({status:"busy"});
} else {
busy = true; // <-- set busy before we start
exec("sleep 5").then(function () {
res.json({status:"ok"});
}).catch(function (err) {
res.json({status:err.message});
}).then(function () {
busy = false; // <-- finally: clear busy
});
}
});

site.listen(8082);

这样做的目的是当请求“/test”时它会触发一个长时间的操作,如果在运行时再次请求“/test”,它会回复“忙”并且什么也不做。

我的问题是,此实现是否安全且正确?它似乎在我的粗略测试中起作用,但它非常简单。这是实质上实现互斥量 +“try-lock”操作的正确方法,还是有一些更合适的 Node.js 构造?来 self 习惯于标准多线程实践的语言,我对 Node 的单线程但异步的性质还不是非常舒服。

最佳答案

没问题 - Javascript 代码不能与 Node.js 中的其他 JS 代码同时运行。没有什么能改变你身下的忙碌旗帜。不需要多线程风格的监视器或关键部分。

关于javascript - 一次只允许一个异步操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41108293/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com