NodeJs-事件循环仅处理I / O请求吗?

时间:2018-09-29 21:39:03

标签: javascript node.js asynchronous event-loop

通常,事件循环仅适用于IO吗? IO工作到底是什么? 例如,假设有一个请求进入NodeJ,然后该请求向API发出出站http请求,以获取一些数据,同时不阻塞用户。

这是IO作业,NodeJ如何处理它?如果不是我要异步进行冗长的计算然后将值返回给用户的http请求,该怎么办?尽管受CPU约束,事件循环也可以处理吗?

1 个答案:

答案 0 :(得分:1)

  

一般来说,事件循环仅适用于IO吗?

我不会将计时器(setTimeoutsetInterval)和舍弃(setImmeadiateprocess.nextTick)视为IO,但通常可以说事件中的事件循环是从外面来的

  

什么是IO工作?

这取决于您所讨论的上下文。每个程序都由用户获得特定的输入并生成特定的输出。例如,在终端中,输入是您的按键,输出是显示的内容。在谈论nodejs IO时,通常指的是网络/文件操作,或更笼统地说:不是用js编写的代码。

  

例如,假设一个请求进入NodeJ,然后该请求向API发出出站http请求以获取一些数据,同时不阻塞用户。

     

这是IO作业,NodeJ如何处理?

Nodejs会生成一个发出请求的后台线程,与此同时,主进程继续进行其他操作(继续执行事件队列中的其他事件)。然后,如果异步请求完成,则后台进程将结果推送到事件队列中,事件循环将从那里将其拉出并执行回调等。

  

如果要代替http请求,我要异步进行冗长的计算,然后将值返回给用户,该怎么办?

您必须在nodejs中生成另一个线程,否则冗长的计算将是同步的。

  

尽管受CPU约束,事件循环也可以处理吗?

所有进入事件循环的东西都会在CPU上执行...