nodejs中的cpu密集型任务是什么意思?如果我的工作负载主要在数据库中完成,那么nodejs是否会等待数据库完成,这对于nodejs来说算不算cpu密集型任务?
我的数据库是cpu密集型任务。
发布于 2020-09-16 11:05:22
在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来说算不算
密集型任务?
不是的。只要数据库在另一个进程中运行,这就不会被视为node.js的CPU密集型任务,也不会像长时间运行的Javascript计算那样阻塞node.js中的事件循环。
它肯定会使用服务器中的总CPU周期,但我们假设有多个CPU核心可用(因此数据库不会占用所有可能的CPU ),并且即使我们让所有的CPU都保持忙碌,操作系统仍然会在线程之间进行时间切片,因此node.js仍然可以正常运行。
附注: Nodejs一直可以使用子进程,现在有了工作线程,所以你可以在其中任何一个进程中做CPU密集型的事情,也不会阻塞主事件循环。
https://stackoverflow.com/questions/63911998
复制相似问题