我刚学会了Node.js皇冠宝石libuv uses blocking system calls for file operations。异步行为是通过线程实现的!这提出了两个问题(我仅关心Unix):
答案 0 :(得分:5)
最有可能支持fs.renameSync()
与fs.rename()
等同步操作。
它使用一个线程池,如您提供的链接中的“注意”中所述。
[...]但是在线程池中调用这些函数,并在需要应用程序交互时通知在事件循环中注册的观察者。
因此,它创建了有限数量的线程,并在它们可用时重用它们。
另外,关于“皇冠宝石的讽刺:”Node.js和libuv并不神奇。它们是您可以随意使用的好工具,但肯定有其局限性。
尽管如此,“ 100万个文件读取”的夸张可能是任何平台无限制地管理的延伸。
答案 1 :(得分:2)
相同的非阻塞API无法使用,因为O_NONBLOCK和朋友不能使用常规文件!对于Linux,AIO是可用的,但它有它自己的怪癖(即取决于文件系统,静默地阻止某些操作)。
我不知道。