2013-11-01 144 views
0

我是Nodejs平台的新手。我了解该节点使用单个线程进行处理。在webserver的情况下,单个线程如何处理来自多个用户的请求。Nodejs单线程和网络服务器

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

+1

也见[如何单线程非阻塞IO模型中的Node.js工作](http://stackoverflow.com/questions/14795145/how-the-单线程 - 非阻塞 - io-model-works-in-node-js) –

回答

0

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

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

弗兰克说得对(虽然呆呆地说)英语:当事情进入你的应用程序时,有一个主事件循环。因此,“处理这个HTTP请求”将被添加到事件循环中,然后在适当的时候处理。

当你调用一个异步操作时(例如一个mysql数据库查询),node.js发送“嘿,执行这个查询”到mysql。由于此查询需要一些时间(毫秒),因此node.js使用MySQL异步库执行查询 - 返回到事件循环并在等待mysql返回时执行其他操作。就像处理该HTTP请求一样。

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

编辑完成

Node.js的使用mysql的C库,所以在技术上的C库可以产卵关闭线程进行通信,但Javascript中你不能做什么的线程。

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

由于RyanWilcox

+0

我知道节点处理I/O异步并且非常有意义。但我想知道node.js如何处理并发请求 – satish

+0

[绝对可以在JavaScript中的单独线程上运行代码。](https://github.com/xk/node-threads-a-gogo) – josh3736