在 NODEJS 中:如果节点不使用多个线程,我们只能同时运行一个函数。当大量请求同时到达 Web 服务器时,这如何工作?
可以清除有关线程和进程的全景吗?
在 NODEJS 中:如果节点不使用多个线程,我们只能同时运行一个函数。当大量请求同时到达 Web 服务器时,这如何工作?
可以清除有关线程和进程的全景吗?
从理论上讲,如果大量请求发生在同一秒内 - 或者如果每个请求都必须执行一些需要一段时间的操作,例如硬数学 - 您的服务器可能会陷入困境。要么不响应线路“末端”的人(延迟几毫秒),要么永远不完成 Node 需要做的所有事情,以便在线路“前端”处理这些请求。
一般来说,Node 采取的策略是,如果你要执行一个长时间的操作——比如查询数据库——程序的执行不应该等待,而是应该在数据库查询完成时“回调”到其他函数。最终完成。
我在另一个 SO 答案中对此进行了更多讨论。您可以在 Google 上搜索“node.js 是癌症”以获取您所谈论的其他示例。
但是这种策略的流行是 Node 和其他语言/框架之间的主要区别之一:这就是 Javascript 的处理方式。
现在,在实践中,实际上发生了几件事。
首先,任何生产节点应用程序都应该使用集群或某种提供负载平衡的解决方案运行。因为您的应用程序有多个工作进程,所以您的解决方案可以同时做不止一件事。
其次,总的来说,Node.js 保持得很好,因为它的想法是不等待一切。它使您的服务器保持忙碌,而不是冷却它的喷气式飞机等待完成的事情。
第三,是的,你必须小心你在服务器中所做的事情。如果某些事情需要太长时间(修改数据库中的所有记录),可能明智的做法是通过某种工作队列系统在后台进行:“嘿,我需要在所有(这些)记录中更新此人的用户名在数据库中”可能应该由另一个 Node.js 进程作为工作人员发生。