Nodejs可以在单核处理器上使用async和await功能吗?

rqdpfwrv  于 2023-05-17  发布在  Node.js
关注(0)|答案(1)|浏览(160)

我只是在浏览node js的内部工作方式。它本质上是将阻塞操作(即异步任务)发送到线程池,其余任务保持等待。那么,如果我们在单个核心应用程序上运行nodejs应用程序,会发生什么呢?
再说一次,这只是我的思维过程,我可能错了。我认为阻塞和非阻塞操作都将在同一个核心上执行。那么,这是否意味着在阻塞任务运行时应用程序可能没有响应呢?这是否意味着我们至少需要一个双核CPU来运行任何想要执行异步操作的nodejs应用程序?

vojdkbi0

vojdkbi01#

Node.js在单线程事件循环模型上运行,这意味着它一次处理一个操作。然而,这并不意味着它只能在多核机器上运行。它也可以在单核机器上运行得很好。理解这一点的关键在于Node.js如何处理阻塞和非阻塞操作。
在Node.js中,阅读文件、发出HTTP请求或查询数据库等I/O操作通常是异步执行的。当这些操作被启动时,它们被移交给系统,释放Node.js以继续处理事件循环中的其他任务。当I/O操作完成时,回调函数被添加到事件队列以在稍后的时间点处理。
这不一定意味着这些操作在另一线程或另一核中执行。事实上,在许多情况下,这些操作是由操作系统或外部系统(如数据库)处理的,它们可以拥有独立于Node.js的多线程功能。
另一方面,CPU绑定的任务在Node.js中是阻塞的。这些操作确实在同一线程中运行,并且可能会阻塞事件循环,导致应用程序变得无响应。如果你有一个CPU绑定的任务需要在不阻塞事件循环的情况下运行,你可以使用Node.js的工作线程或子进程,如果它们可用,它们会使用额外的核心。
所以,为了回答你的问题,Node.js应用程序可以在单核机器上运行,但如果你有CPU绑定的任务,你想并行运行,那么你会受益于有一个多核机器。但是,请记住,Node.js不是为CPU密集型任务设计的;它的优势在于处理许多并发I/O操作,这就是为什么它经常用于构建高并发服务器的原因。
关于标题中的问题,当async函数等待Promise解析时,Node.js可以继续处理事件循环中的其他任务。一旦Promise被解析,async函数的其余部分就可以执行了。

相关问题