如果nodejs中的cpu密集型任务是啥意思?与数据库执行 cpu 密集型任务相关
Posted
技术标签:
【中文标题】如果nodejs中的cpu密集型任务是啥意思?与数据库执行 cpu 密集型任务相关【英文标题】:what do they mean if of cpu intensive task in nodejs? in correlation to the database doing cpu intensive task如果nodejs中的cpu密集型任务是什么意思?与数据库执行 cpu 密集型任务相关 【发布时间】:2021-01-02 19:26:38 【问题描述】:如果在 nodejs 中执行 cpu 密集型任务,它们是什么意思?如果我的工作量主要在数据库中完成,nodejs 是否会等待数据库完成,这算作 nodejs 的 cpu 密集型任务吗?
我的数据库是 CPU 密集型任务。
【问题讨论】:
【参考方案1】:如果在 nodejs 中执行 cpu 密集型任务,它们是什么意思?我
Nodejs 仅使用一个 CPU 来运行您的 javascript。在其他进程中运行的其他事物(例如您的数据库)有自己的 CPU 使用策略,不会直接影响 node.js 中的 CPU 使用率。
因此,如果您的 Javascript 本身正在执行 CPU 密集型操作(在您自己的 Javascript 中),例如一些非常困难的计算,那么 node.js 将陷入困境,无法以响应方式处理传入的请求。对于服务器,这通常被认为是一种糟糕的情况,因为服务器在长时间计算期间将无响应。
对在另一个进程(如数据库)中运行的东西进行异步调用几乎不会使用 node.js 中的任何 CPU。 node.js 进程进行异步调用以启动外部操作,然后该异步调用(几乎立即)将控制权返回给 node.js,并且 node.js 返回到事件循环并立即准备好处理其他传入事件。然后,当异步操作完成时,一个新事件将被插入到事件循环中,这将触发异步完成回调,然后您的 node.js 应用程序可以处理结果。
如果我的工作量主要在数据库中完成,nodejs 是否会等待数据库完成,这算作 nodejs 的 cpu 密集型任务吗?
没有。只要数据库在另一个进程中运行,就不会算作 node.js 的 CPU 密集型任务,也不会像长时间运行的 Javascript 计算那样阻塞 node.js 中的事件循环。
它肯定会使用服务器中的整体 CPU 周期,但我们假设有多个 CPU 内核可用(因此数据库不会占用所有可能的 CPU)并且即使我们保留所有CPU 很忙,操作系统仍然会在线程之间进行时间切片,因此 node.js 仍然可以正常运行。
附: Nodejs 一直能够使用子进程,现在有了工作线程,因此您可以在其中任何一个中执行 CPU 密集型的事情,也不会阻塞主事件循环。
【讨论】:
以上是关于如果nodejs中的cpu密集型任务是啥意思?与数据库执行 cpu 密集型任务相关的主要内容,如果未能解决你的问题,请参考以下文章