大多数NodeJS程序员都知道为什么阻止NodeJS的单线程事件循环是不好的。例如,在读取文件时,我们知道最好使用fs.readFile而不是fs.readFileSync。我的问题是:如果API要执行的基础任务本质上是同步的,那么如何首先创建一个asyn API?换句话说,我如何创建一个API,如fs.readFileSync,而不是使用事件循环线程来执行底层任务?我是否必须走出NodeJS& Javascript要做到这一点吗?
答案 0 :(得分:1)
如果是的话,如何首先创建一个asyn API API要执行的基础任务本质上是同步的吗?
在node.js中,有以下选项可用于创建自己的异步操作:
fs.readFile()
)。如果你的主要操作本身是同步的,并且只能在node.js中同步完成,那么这个选项显然无法解决你的问题。setTimeout()
,setImmediate()
或nextTick()
将代码分成小块,以便其他内容可以与您的操作交错,并且您不会阻止其他内容共享CPU。这不会阻止CPU使用,但它确实允许与其他操作共享CPU。下面是一个以块的形式迭代数组的示例,它不会阻止其他操作共享CPU:Best way to iterate over an array without blocking the UI。我是否必须走出NodeJS& Javascript要做到这一点吗?
上面的项目#1,#2,#3都可以通过Javascript完成。第4项涉及创建本机代码插件(您可以在其中访问本机线程)。
换句话说,我该如何创建API等 fs.readFileSync
要从头开始真正创建fs.readFileSync()
之类的API,您必须使用选项#3(同步执行,但在另一个进程中,然后异步通信结果)或选项#4(访问操作系统)服务的级别低于通过本机代码插件内置到node.js中的服务。