何时使用asynchronousnodejs?

我不是说ES7的asynchronous,但一般的asynchronous函数,如callback和promisses。

所以,我研究了关于NodeJS和事件循环。 一切都让我相信NodeJS有一种asynchronous的错觉。

据我所知,这只有当function必须通过外部媒体传递时才有效。 例如,执行一个读取文件(将被OS API使用),或者执行一个将使用外部API的请求。

我发现很less有人谈论这个问题,我想在这里和你讨论一下。 我的问题是:我是否正确的想法? 还有,如果有实际的方法来找出asynchronous工作在哪里,它不支付? 在某些情况下,如果我是正确的,asynchronous只会花费更多的内存。

Node.js总是asynchronous工作。 如果你正在做一些阻塞I / O(例如使用fs.readFileSync()或其他同步函数),完整的node.js运行时进程将在该调用期间停止处理其他任何事情。 因此,在Web请求处理中,你永远不会调用同步函数(它只能在node.js命令行应用程序和应用程序启动期间等)

这只是node.js的一个基本特性; 这是因为node.js / JavaScript没有和不需要synchronized线程同步function,例如。 Java的。

从技术上讲,multithreading运行的node.js进程中唯一的地方是内部的libuv库,只是为了补偿主机系统丢失的asynchronousI / O。

如果处理不是由I / O事件触发的,则可以使用nodes.js计时器来创build人为事件。 一般情况下,您认为这样做会使nodes.js不方便或不适合CPU限制处理。

恰恰这只有当函数必须通过外部介质时才有效。 这是单线程asynchronous事件循环的折衷。 您应该避免在node.js中进行任何CPU绑定计算,因为它会阻止事件循环,因此不会回复任何callback。

节点仅在OS IO调用时产生,当使用callback或承诺时,节点不会产生。 这是处理基于IO的调用的两种方式,但本身并不是asynchronous的。 (我见过很多项目,人们创build基于callback的API的同步代码:()