node.js - Node 中的同步 I/O 是如何实现的?
问题描述
我很想知道在进行同步 I/O 调用时 Node 中发生了什么。我读了这个,从它看来,
fs.writeFileSync 是同步的,因为它在执行时会阻塞事件循环。它不要求内核对底层文件系统进行同步写入。
但是,我无法在代码中找到导致同步读取的部分。我不太明白,如果没有阻塞write
系统调用,它是如何阻塞事件循环的。只是忙着等write
回来吗?write(2)
或者,在or发生的那段时间里,Node 是否真的在工作read(2)
?
或者,也许我误解了上面所说的“同步写入”是什么意思。我会将同步写入视为对write(2)
阻塞的调用,而“异步写入”则视为传递O_NONBLOCK
并立即返回。
解决方案
查看read
andreadSync
方法,不同之处在于异步版本创建了一个将调用回调的包装器,并将FSReqCallback
在binding.read
方法调用中添加一个,而同步版本将undefined
作为回调传递,加上另一个参数(一个空对象)。
我认为binding.read
会根据FSReqCallback
参数的存在立即返回。
但是,我无法找到使用该FSReqCallback
参数的方法。
推荐阅读
- liquid-xml - 在 Liquid-xml 项目中组织 json 模式
- mariadb - mariadb 在删除表后反应迟缓
- doctrine - 在 Doctrine 的查询构建器中将 DateTime 对象解析为字符串
- typo3 - TYPO3:带有 menuDataProcessor 的 OnePager 菜单
- gnuplot - Gnuplot,风强度和方向图
- pine-script - 松脚本;是否可以将标签的 y 位置设置为图表顶部?
- reactjs - 如何在 Graphql 中使用多个端点?
- mongodb - 使用 MongoDB 中的命令提示符从集合中删除/删除文档
- python - Boto3 S3 upload_file 通过代理
- angular - 如何强制“ng e2e”使用最新的 ChromeDriver