javascript - Node.js + Express,它可以用单个 cpu 核心处理并行请求吗?
问题描述
我正在 Docker 中创建一个基于 nodejs、express 和 mongodb 的 API。
Docker 目前正在一个具有 512MB RAM 和 1 个 cpu 核心的 DigitalOcean 液滴中运行。
我已经读过nodejs是每个cpu内核的单线程,并且使用称为“集群”的东西可以让它在每个内核上启动一个应用程序的fakemultithread。我只有一个核心,所以..这是否意味着我被搞砸了?
如果我的 API 中有一个端点,假设它需要 5 秒来提供响应……这是否意味着在这 5 秒内我无法处理任何其他请求?
解决方案
我只有一个核心,所以..这是否意味着我被搞砸了?
这仅意味着您的实例一次只能做一件事。由于上下文切换,它仍然可以实现多个线程同时运行。这就是现代计算机如何能够并行运行几千个线程,即使它们只有几个内核。所以不,你没有搞砸。
现在 javascript 最酷的地方是大多数 API 调用或 IO 不会阻塞 javascript 主线程。Nodejs 会为你生成另一个线程,这发生在后台,因此你不必处理线程和那些东西,只需编写你的代码,nodejs 就可以完成它。
如果我的 API 中有一个端点,假设它需要 5 秒来提供响应……这是否意味着在这 5 秒内我无法处理任何其他请求?
这取决于你想做的事情。如果您正在进行大量计算(阻塞),那么是的,您应该为此生成另一个线程。如果是 readig 文件,请求数据库等,那不是问题,因为它是非阻塞的,并且 nodejs 可以同时回答其他请求。
推荐阅读
- python - 如何重新格式化我的代码以使其使用面向对象编程?
- regex - 如何测试一个字符串是否不包含两个给定的子字符串?
- sql - 如何用逗号拆分字符串并将其绑定到 PL/SQL Oracle 中的嵌套表集合
- java - 以下 java / android 代码是否有任何性能差异?
- c# - 我应该如何处理偶尔损坏的文件?
- netty - 当我们在 Netty 中不关闭 `ChannelHandlerContext` 时会发生什么?
- wordpress - 简码不适用于博客页面上的存档介绍
- ipad - 在 Jupyter Notebook 中转换代码而无需访问命令行
- node.js - 如何使用 Mandrill 和节点请求将文件(来自 url)附加到电子邮件
- sql - 选择排名和计数