如何使用Typescript锁定Node / Express中的关键代码段

时间:2018-05-15 11:29:42

标签: node.js multithreading typescript express

我对JavaScript / Typescript / Node / Express世界有点新鲜,但到目前为止,我的研究结果似乎并没有被接受为“'在Node / Express应用程序中锁定代码的关键部分的方法。我发现了几个NPM软件包(async-lockawait-lockrwlock),但它们的下载/周数都非常低,看起来并不是特别的维护得很好(因为他们最后的出版物很旧,或者官方维护者明确表示他没有积极维护它)。似乎没有TypeScript定义(至少据我所知)。并且,最有问题的是,在文档方面似乎没有太多(除了几个示例以显示常见用法)。我在这里看到一些问题,人们已经编写了自己的(通常是主动轮询)锁(这似乎是次优的),或建议使用DB进行锁定(这似乎是轻量级问题的重量级解决方案)。 async-lock似乎是最受欢迎的(下载计数),但我不太警惕取决于所有者不承担责任的事情(而且文档很薄)。

我的用例似乎非常简单。我正在构建一个REST服务器,并且这些对象具有一些相互依赖性。因此,举例来说,如果有人正在更新FOO,并且FOO已经引用了BAR,那么我想要将我的关键部分锁定在FOO' FOO'和' BAR'然后获取旧的FOO,任何相关的BAR,验证更新,并将新的FOO写回数据库 - 之后我将发布' FOO&#39 ;和' BAR'锁。

所以我的问题是这个 - 对于TypeScript中的简单临界区锁定(支持多个同时锁/键),标准练习/ API /包是什么?

这是一个单服务器/单数据库应用程序,因此不需要分布式锁 - 只是试图处理由于'线程切换而同时处理多个请求的事实#39;在异步IO上。

1 个答案:

答案 0 :(得分:2)

Node.js中没有这样的内置功能。用户可以使用第三方库或开发自己的解决方案。

async-lock,您列出的第一个包,considerable download statsTypeScript definitionsmaintained

虽然很多小型实用NPM软件包可能多年没有更新,因为它们根本不需要 - 如果它们甚至需要,它们很简单,可以分叉,修改和选择性PRed。

  

这是一个单服务器/单数据库应用程序,因此不需要分布式锁 - 只是试图处理由于异步IO上的“线程切换”而同时处理多个请求的事实。 p>

然后,它可能是Node.js内存中锁的一个很好的用例,它不需要存储在数据库或文件系统中。