Nodejs请求之间的同步性

时间:2014-06-09 19:31:21

标签: multithreading node.js mongodb asynchronous synchronous

我理解节点和异步编程概念的异步性,我已经做了很长时间了。但是,如果你愿意,我需要同时检查“同步”的请求。让我解释一下:

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

让我在泡菜中的部分是“步骤2”,我们设置“isProcessing”标志。这是一个异步数据库操作( mongo ),当2个以上的请求同时进入 时,该操作尚未完成。因此,多个请求正在尝试创建相同的资源。如果请求被足够的时间分开以进行数据库写入(~5ms),则问题就会消失,而不是“同时”请求。

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

1 个答案:

答案 0 :(得分:0)

您只需要正确访问数据库。当你说

UPDATE MyLockTable SET IsProcessing = 1 WHERE IsProcessing = 0

如果IsProcessing已设置为1,则会修改0行。否则为1行。这就是你如何区分这两种情况并且只开始繁重的工作一次。