首页 > 解决方案 > Node 中的同步 I/O 是如何实现的?

问题描述

我很想知道在进行同步 I/O 调用时 Node 中发生了什么。我读了这个,从它看来,

fs.writeFileSync 是同步的,因为它在执行时会阻塞事件循环。它不要求内核对底层文件系统进行同步写入。

但是,我无法在代码中找到导致同步读取的部分。我不太明白,如果没有阻塞write系统调用,它是如何阻塞事件循环的。只是忙着等write回来吗?write(2)或者,在or发生的那段时间里,Node 是否真的在工作read(2)

或者,也许我误解了上面所说的“同步写入”是什么意思。我会将同步写入视为对write(2)阻塞的调用,而“异步写入”则视为传递O_NONBLOCK并立即返回。

标签: node.js

解决方案


查看readandreadSync方法,不同之处在于异步版本创建了一个将调用回调的包装器,并将FSReqCallbackbinding.read方法调用中添加一个,而同步版本将undefined作为回调传递,加上另一个参数(一个空对象)。

我认为binding.read会根据FSReqCallback参数的存在立即返回。

但是,我无法找到使用该FSReqCallback参数的方法。


推荐阅读