node.js如何处理同步http请求?

node.js如何处理同步http请求?,node.js,race-condition,Node.js,Race Condition,我正在学习node.js,但我没有找到这个问题的直接答案。如果HTTP传入请求实际上同时传入,node.js如何处理它们?假设在给定的时间有一个HTTP请求。因此,全局变量的值可能会更改。然而,实际上在同一时间,另一个请求出现了。为了服务新请求,需要一个全局变量的值,但第一个请求的代码仍在执行。节点对此有何反应 Node.js一个接一个地处理请求。只有一根线 但是,例如,如果您在数据库中查询某些信息并传递回调,则在执行查询时,node.js可以处理新的请求。数据库查询完成后,node.js调用回

我正在学习node.js,但我没有找到这个问题的直接答案。如果HTTP传入请求实际上同时传入,node.js如何处理它们?假设在给定的时间有一个HTTP请求。因此,全局变量的值可能会更改。然而,实际上在同一时间,另一个请求出现了。为了服务新请求,需要一个全局变量的值,但第一个请求的代码仍在执行。节点对此有何反应

Node.js一个接一个地处理请求。只有一根线

但是,例如,如果您在数据库中查询某些信息并传递回调,则在执行查询时,node.js可以处理新的请求。数据库查询完成后,node.js调用回调并完成对第一个请求的处理

编辑:

简单服务器示例:

var http = require('http');
var numresponses = 0;
http.createServer(function (request, response) {
     res.writeHead(200, {'Content-Type': 'text/plain'});
     res.end('This is response #' + (++numresponses));
}).listen(80);

即使两个请求同时发生,此服务器也将始终打印出请求的编号,node将选择一个首先处理的请求,并且两个请求的编号都不同。

因此,如果我想确保不出现竞态条件,我可以将所有请求发送到队列并逐个进行服务,使用回调来确保顺序执行,对吗?您不需要创建队列。Node.js已经为您完成了这项工作。创建带有节点的http Web服务器时,传递给
createServer
函数的回调将针对队列中由节点自身创建的每个请求执行。因为节点脚本基本上是单线程的,所以节点中没有基于线程的竞争条件。添加了简单的服务器示例来回答这个问题。