我理解节点和异步编程概念的异步性,我已经做了很长时间了。但是,如果你愿意,我需要同时检查“同步”的请求。让我解释一下:
让我在泡菜中的部分是“步骤2”,我们设置“isProcessing”标志。这是一个异步数据库操作( mongo ),当2个以上的请求同时进入 时,该操作尚未完成。因此,多个请求正在尝试创建相同的资源。如果请求被足够的时间分开以进行数据库写入(~5ms),则问题就会消失,而不是“同时”请求。
任何人都可以提供一些好的建议来解决这个问题。似乎我需要以同步(线程阻塞)方式设置“isProcessing”标志。我知道文件系统有同步操作 - 这是要走的路吗?我们在多核机器上使用节点,有一天它将扩展到云端。我们使用pm2在多个核心上分发我们的应用程序。任何建议都将不胜感激。
答案 0 :(得分:0)
您只需要正确访问数据库。当你说
UPDATE MyLockTable SET IsProcessing = 1 WHERE IsProcessing = 0
如果IsProcessing已设置为1,则会修改0行。否则为1行。这就是你如何区分这两种情况并且只开始繁重的工作一次。