javascript - Node.js 中的本地文件的异步文件 IO 方法如何工作?

标签 javascript node.js libevent reactor

Node 的所有文件系统 IO 操作都有异步/同步版本,但我想知道:Node.js 中如何实现异步文件 IO 以对本地文件进行操作?我自己正在摆弄 libevent,它使用 react 器模式,如 Node,但我读到 using evented IO on local files is pointless ,因为它们始终可读可写,因此可以立即对其进行操作。

如果这是真的,这些方法之间有什么区别,至少对于本地文件来说是这样?

最佳答案

查看“understanding node.js io loop”文章中的“I/O 成本”表。本地文件 IO 不是即时的。在内部,它是在异步文件 api 不可用的系统 (Linux) 上使用阻塞文件操作和 libuv 线程池以及在可用的情况下使用内核级异步调用(例如,Windows 上的 IOCP)来实现的。

我还没有看到不同系统上同步与异步文件io的基准,但值得知道的是线程池调度does add some penalty通常池大小与 CPU 数量相对应,这对于 cpu 绑定(bind)的异步任务很有用,但对于异步文件 IO 模拟可能不是最佳选择。

我的猜测是,与同步版本相比,平均而言,即使基于线程池的异步 FS 也会导致更好的服务器延迟/响应能力,尤其是在大文件上。

关于javascript - Node.js 中的本地文件的异步文件 IO 方法如何工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17059832/

相关文章:

javascript - html 链接不起作用 href javascript 参数太长

javascript - NodeJS 错误处理 - 使用错误代码或子类化

ubuntu - 在 Ubuntu 12.04 上安装 tmux_1.8 时出现 libevent 错误

c - Libevent:获取接受的连接列表

javascript - 数据表动态创建的表不可排序

javascript - 如何防止空格只进入数据库?

javascript - MongoDB Node - 获取插入对象的 _id

openssl - 严重错误:找不到 'openssl/bio.h'文件

javascript - 如何单击列表项内的 anchor 标记?

node.js - Electron 更新程序的功能quitAndInstall