我是Nodejs平台的新手。我了解该节点使用单个线程进行处理。在webserver的情况下,单个线程如何处理来自多个用户的请求。Nodejs单线程和网络服务器
我想知道NodeJS如何处理来自客户端的并发请求。
我是Nodejs平台的新手。我了解该节点使用单个线程进行处理。在webserver的情况下,单个线程如何处理来自多个用户的请求。Nodejs单线程和网络服务器
我想知道NodeJS如何处理来自客户端的并发请求。
现在跟我说:异步编程并不一定意味着多线程。
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
也见[如何单线程非阻塞IO模型中的Node.js工作](http://stackoverflow.com/questions/14795145/how-the-单线程 - 非阻塞 - io-model-works-in-node-js) –