增量/减量操作在Node.js中是线程安全的吗?

时间:2019-01-31 12:52:08

标签: node.js multithreading

我有一个简单的api,用户可以向其发送一些数据。数据是对象的JSON数组。我的目标是知道api当前正在处理多少个对象。我创建了一个全局计数器,对于收到的每个请求,我都会向该计数器添加对象的数量,当处理完对象后,我将从计数器中减去该数量。我的问题是,这种方法是线程安全的吗?意思是,我是否可以有两个请求-一个刚刚完成处理以便进行扣除,另一个请求将我的请求数量添加到计数器中,这是一种竞争条件?

1 个答案:

答案 0 :(得分:1)

您不应该知道一台服务器上是否运行了一个应用程序。 例如

DB_CHARSET_INTRANET="utf8"
DB_COLLATION_INTRANET='utf8_general_ci'

即使在并发请求期间,计数器也会按预期对请求进行计数,因为Node JS是单线程的,Event Loop会关心它。但是,如果您有多个服务器,则该方法将不起作用,因为全局变量存储在每个服务器的RAM中。在这种情况下,您应该拥有一些联合数据库,例如Redis(这是一个键值数据库,并且将数据存储在RAM中,因此非常快)来存储计数器。