Javascript 异步文件IO方法如何适用于Node.js中的本地文件?

Javascript 异步文件IO方法如何适用于Node.js中的本地文件?,javascript,node.js,libevent,reactor,Javascript,Node.js,Libevent,Reactor,Node的所有文件系统IO操作都有一个异步/同步版本,但我想知道:如何在Node.js中为本地文件上的操作实现异步文件IO?我自己也在搞libevent,它使用reactor模式,比如Node,但我读到了,因为它们总是可读写的,所以它们会立即被操作 如果这是真的,至少对于本地文件来说,这些方法之间的区别是什么?请查看“”文章中的“I/O成本”表。本地文件IO不是即时的。在内部,它是在异步文件api不可用的系统(Linux)上使用阻塞文件操作和libuv线程池实现的,在可用的系统(例如Window

Node的所有文件系统IO操作都有一个异步/同步版本,但我想知道:如何在Node.js中为本地文件上的操作实现异步文件IO?我自己也在搞libevent,它使用reactor模式,比如Node,但我读到了,因为它们总是可读写的,所以它们会立即被操作

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

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

我还没有在不同的系统上看到同步与异步文件io的基准测试,但值得知道的是,线程池调度和池大小通常与cpu数量相对应,这对于cpu绑定的异步任务来说是好的,但对于异步文件io仿真来说可能不是最佳的


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

我想我理解。。。那么Node.js实际上在一个单独的线程上执行IO?但是,libevent没有,它只是等待文件描述符“可用”。仅文件IO,仅在linux上。Node.js使用名为libuv的库,该库类似于libevent。以下是关于libuv的好书: