multithreading - Nodejs 请求之间的同步

标签 multithreading node.js mongodb asynchronous synchronous

我了解 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/

相关文章:

node.js - 使用 SSL 托管多个 node.js 站点

javascript - Socket.io 聊天服务器不提供 SSL 证书

node.js - 如何将 facebook 爬虫机器人重定向到另一个网页?

node.js - 来自 Mongoose 方法的新文档

c# - 多线程单元测试

java - AtomicInteger 增量未按预期运行

c - 使用管道的 C 多线程聊天程序

java - 执行器框架异常行为

mysql - MySQL和MongoDB之间的数据同步

javascript - MongoDB 与 Node.js 说 "Unexpected token"