Node.js Nodejs单线程和Web服务器

Node.js Nodejs单线程和Web服务器,node.js,express,Node.js,Express,我是Nodejs平台的新手。我知道节点使用单个线程进行处理。对于Web服务器,单个线程如何处理来自多个用户的请求 我想知道NodeJS如何处理来自客户端的并发请求 现在跟我说吧:异步编程不一定意味着多线程 Javascript是一个单线程运行时-您无法在JS中创建新线程,因为语言/运行时不支持它 Frank用英语说得很对(虽然有些迟钝):有一个主事件循环,可以在事情进入你的应用程序时处理。因此,“处理这个HTTP请求”将被添加到事件循环中,然后在适当的时候进行处理 当您调用异步操作(例如mysq

我是Nodejs平台的新手。我知道节点使用单个线程进行处理。对于Web服务器,单个线程如何处理来自多个用户的请求


我想知道NodeJS如何处理来自客户端的并发请求

现在跟我说吧:异步编程不一定意味着多线程

Javascript是一个单线程运行时-您无法在JS中创建新线程,因为语言/运行时不支持它

Frank用英语说得很对(虽然有些迟钝):有一个主事件循环,可以在事情进入你的应用程序时处理。因此,“处理这个HTTP请求”将被添加到事件循环中,然后在适当的时候进行处理

当您调用异步操作(例如mysql db查询)时,node.js会向mysql发送“嘿,执行此查询”。由于此查询需要一些时间(毫秒),node.js使用MySQL异步库执行查询-返回事件循环并在那里执行其他操作,同时等待MySQL返回给我们。比如处理HTTP请求

编辑:相比之下,node.js可以简单地等待mysql返回(不做任何事情)。这称为同步调用。想象一下,在一家餐馆里,你的侍者把你点的菜交给厨师,然后坐下来,在厨师做饭的时候转动他/她的拇指。在餐馆里,就像在node.js程序中一样,这样的行为是愚蠢的——你有其他顾客饿了,需要服务。因此,您希望尽可能异步,以确保一个服务员(或node.js进程)为尽可能多的人服务

编辑完成

js使用C库与mysql进行通信,因此从技术上讲,这些C库可能会产生线程,但在Javascript中,您无法对线程执行任何操作

来源


多亏了RyanWilcox

see,我明白了节点处理I/O异步,这非常有意义。但是我想知道node.js如何处理并发请求