首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么fs是唯一在NodeJS中提供同步调用的I/O库

为什么fs是唯一在NodeJS中提供同步调用的I/O库
EN

Stack Overflow用户
提问于 2017-03-10 02:50:14
回答 1查看 49关注 0票数 1

最近我正在研究这个问题。我阅读了fs源代码,发现了fs.readSync()和fs.read()之间唯一的区别是

代码语言:javascript
复制
// async vrsion
  var req = new FSReqWrap();
  req.oncomplete = cb;
  binding.stat(pathModule._makeLong(path), req);

我读过一些文章,说阻塞和非阻塞fs api调用之间的区别是异步版本将在新的v8工作线程中运行。

当我阅读这个关于fs系统调用的文章- daveeddy时,异步和同步的性能。结论是异步调用和同步调用都是同一个系统调用。但是,异步运行在工作线程上,同步运行在主线程上。

我的问题是,我注意到下面的评论

文件系统操作是Node.js中最后使用阻塞系统调用的操作之一(打开、preadv、pwritev)。

在哪里可以找到fs真正的系统调用?这个评论是对还是错?

这是回答我的问题的关键:“为什么fs是在NodeJS中提供同步调用的唯一I/O库?”

我真的很好奇。感谢您的耐心和进一步的建议。

EN

回答 1

Stack Overflow用户

发布于 2017-03-10 02:59:33

Node.js是以服务器为中心设计的。异步调用不会减少系统调用的数量,但允许您更好地利用CPU,方法是在I/O正在进行时继续计算,或者同时执行多个I/O。

使用异步版本,运行时将尝试在排队时执行其他作业(回调)(因此可以进行多路复用)。使用同步版本,编写代码就更容易了,因为不使用回调就可以获得结果。

节点的IO由libuv包装,不鼓励直接进行系统调用。您可以使用ffi做一些原始的syscall,但是C可能是更好的工作工具。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42709304

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档