首页 > 解决方案 > Node.js + Express,它可以用单个 cpu 核心处理并行请求吗?

问题描述

我正在 Docker 中创建一个基于 nodejs、express 和 mongodb 的 API。

Docker 目前正在一个具有 512MB RAM 和 1 个 cpu 核心的 DigitalOcean 液滴中运行。

我已经读过nodejs是每个cpu内核的单线程,并且使用称为“集群”的东西可以让它在每个内核上启动一个应用程序的fakemultithread。我只有一个核心,所以..这是否意味着我被搞砸了?

如果我的 API 中有一个端点,假设它需要 5 秒来提供响应……这是否意味着在这 5 秒内我无法处理任何其他请求?

标签: javascriptnode.jsexpress

解决方案


我只有一个核心,所以..这是否意味着我被搞砸了?

这仅意味着您的实例一次只能做一件事。由于上下文切换,它仍然可以实现多个线程同时运行。这就是现代计算机如何能够并行运行几千个线程,即使它们只有几个内核。所以不,你没有搞砸。

现在 javascript 最酷的地方是大多数 API 调用或 IO 不会阻塞 javascript 主线程。Nodejs 会为你生成另一个线程,这发生在后台,因此你不必处理线程和那些东西,只需编写你的代码,nodejs 就可以完成它。

如果我的 API 中有一个端点,假设它需要 5 秒来提供响应……这是否意味着在这 5 秒内我无法处理任何其他请求?

这取决于你想做的事情。如果您正在进行大量计算(阻塞),那么是的,您应该为此生成另一个线程。如果是 readig 文件,请求数据库等,那不是问题,因为它是非阻塞的,并且 nodejs 可以同时回答其他请求。


推荐阅读