我是 Nodejs 平台的新手。我知道节点使用单个线程进行处理。在网络服务器的情况下,单个线程如何处理来自多个用户的请求。
我想知道 NodeJS 如何处理来自客户端的并发请求。
现在跟我说吧:异步编程并不一定意味着多线程。
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 中,您不能对线程做任何事情。
source异步编程如何在单线程编程模型中工作?
感谢瑞安威尔科克斯