Node.js + express.js 和线程安全问题

3
假设我有一个项目数组,每个GET调用都会对该数组进行更改(可能是添加/删除/移动)。那么这是否“线程安全”?我知道Node.js是单线程的,但是否有可能同时处理两个GET请求?
2个回答

5
作为单线程的Node,每次只有一段代码在执行。回调函数(例如来自远程HTTP GET请求的回调)将被添加到event loop消息队列的末尾。当堆栈上没有更多函数时,程序会等待将消息添加到队列中,并运行消息的函数(在这种情况下是请求回调函数)。
如果您正在对远程服务器进行并行请求,则除非按顺序运行请求,否则不会每次都以相同的顺序完成请求。然而,回调函数永远不会同时运行-只能同时执行一个函数。

2

由于所有数组操作都是阻塞的,因此它是线程安全的。在node.js中,唯一不阻塞的操作是I/O。 由于您没有任何异步操作,所以您的情况没有问题。(除非您需要执行像访问数据库之类的操作?)


2
但是如果我调用一个对数组进行多个操作的函数,是否有可能Node.js在操作的中间某个位置停止以便为另一个调用提供服务呢? - AlonAlon
@AlonAlon,那就相当于多线程了,所以不行。您的请求处理代码将在启动另一个请求之前完成。无论您的函数是使用2行代码需要1毫秒还是使用更多操作需要1分钟,都没有关系。 - Snackoverflow

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接