我是nodejs的新手,目前正在学习它。我知道nodejs是单线程的,但是我想知道:例如,如果我使用非阻塞方法,则有20000个并发请求,而一个请求需要花费很长时间,而其他线程则需要更短的时间。因此,一旦我们满足了更长的时间要求,nodejs就会说“嗨,请暂停,需要使用其他请求”,nodejs是否有默认时间来检测是否需要暂停?请更正我,如果我使用了错误的单词“ puase”(因为我认为这是单线程的,所以如果要处理另一个请求,它应该停止为一个请求计算)。在我假设的情况下,那么较长的请求需要很多时间才能处理?
感谢您的帮助。
确实,node.js一次只能接收或响应一个请求,但是它可以同时处理多个请求。
例如,假设您有一个作为rest api的node.js应用程序,并且每个请求都导致对数据库的调用,端点C除外。其余api具有3个端点。
端点A:需要3秒钟才能与数据库对话
端点B:花费2秒与数据库对话
端点C:不与数据库对话,它仅返回静态文本。
一次最多只能发生1个请求。无论时间戳有多近,总是第一。
现在,假设我们同时有10个请求按此顺序发生:
ABCBCCAABC
以下是如何接收和回复它们的方法:
REC:A
REC:B
REC:C
RESP:C
REC:B
REC:C
RESP:C
REC:C
RESP:C
REC:A
REC:A
REC:B
REC:C
RESP:C
// 2 seconds later
RESP:B
RESP:B
RESP:B
// 1 second later
RESP:A
RESP:A
RESP:A
C总是立即发生,因为它不执行任何异步操作。然后,您收到所有B,然后收到所有A,因为B比A快。
尽管B和A的顺序可能会因数据库设置而异,例如,如果将其设置为一次仅处理x个查询,则该顺序可能会有所不同。
如果我们引入了端点D并执行了耗时6秒的同步操作,您将得到以下结果:
ADABC
REQ:A
REQ:D
// 6 long seconds later...
RESP:D
REQ:A
REQ:B
REQ:C
RESP:C
// 2 seconds later...
RESP:B
// 1 second later...
RESP:A
RESP:A
因为D在执行同步操作时会停止所有JavaScript处理。1个执行同步操作的端点很容易导致有人将您的api暂停。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句