Nodejs单线程和webserver

时间:2013-11-01 06:28:35

标签: node.js express

我是Nodejs平台的新手。我知道该节点使用单个线程进行处理。在webserver的情况下,单个线程如何处理来自多个用户的请求。

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

1 个答案:

答案 0 :(得分:0)

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

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

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

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

编辑:相比之下,node.js可以简单地等待(无所事事)让mysql回到它。这称为同步调用。想象一下一家餐馆,你的服务员把你的订单提交给厨师,然后坐下来,在厨师做饭的时候揉捏他/她的拇指。在餐馆中,就像在node.js程序中一样,这种行为是愚蠢的 - 你有其他顾客,他们很饿,需要服务。因此,您希望尽可能保持异步,以确保一个服务员(或node.js进程)为尽可能多的人服务。

编辑完成

Node.js使用C库与mysql进行通信,因此从技术上讲,这些C库可能会产生线程,但在Javascript中你无法对线程做任何事情。

来源How does Asynchronous programming work in a single threaded programming model?

感谢RyanWilcox