gpt4 book ai didi

multithreading - Nodejs 请求之间的同步

转载 作者:太空宇宙 更新时间:2023-11-04 02:34:03 26 4
gpt4 key购买 nike

我了解 Node 的异步本质和异步编程概念,我已经这样做很长时间了。但我现在的情况是,如果您愿意的话,我需要同时发出请求来检查“同步”的内容。让我解释一下:

  • UserA 请求的资源不存在。
  • 为“isProcessing”设置标志,让其他人知道资源正在创建。
  • UserB 请求相同的资源,看到它正在处理,并等待它准备好(使用轮询 - 不要关注这一点,因为这部分按照我们想要的方式工作)
  • [一堆繁重的异步内容恰好生成了资源]
  • 资源已准备就绪,任何投票的人都会收到通知(就像我说的,这部分有效)

让我陷入困境的部分是“第 2 步”,我们设置了“isProcessing”标志。这是一个异步数据库操作 (mongo),当同时有 2 个以上请求传入时,该操作尚未完成。结果,多个请求尝试创建相同的资源。如果请求之间有足够的时间来进行数据库写入(约 5 毫秒),则问题就会消失,但“同时”请求则不会。

任何人都可以提供一些好的建议来解决这个问题吗?看来我需要以同步(线程阻塞)方式设置“isProcessing”标志。我知道文件系统具有同步操作 - 这是正确的方法吗?我们正在多核机器上使用 Node ,有一天它将扩展到云中。我们使用 pm2 跨多个核心分发我们的应用程序。任何建议将不胜感激。

最佳答案

您只需要获得正确的数据库访问权限即可。当你说

UPDATE MyLockTable SET IsProcessing = 1 WHERE IsProcessing = 0

如果 IsProcessing 已设置为 1,则修改 0 行。否则,修改 1 行。这样您就可以区分这两种情况并只开始一次繁重的工作。

关于multithreading - Nodejs 请求之间的同步,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24127544/

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