Rob*_*mer 5 asynchronous nonblocking node.js libuv
我刚刚了解到Node.js皇冠宝石libuv使用阻塞系统调用进行文件操作.异步行为是通过线程实现的!这提出了两个问题(我只关心Unix):
最有可能支持同步操作,比如fs.renameSync()VS fs.rename().
它使用线程池,如您提供的链接中的" 注释 "中所述.
[...]但是在线程池中调用这些函数,并在需要应用程序交互时通知在事件循环中注册的观察者.
因此,它创建了有限数量的线程,并在它们可用时重用它们.
此外,关于" 皇冠宝石:"Node.js和libuv的讽刺不是魔术.它们是您可以随意使用的好工具,但肯定有它们的局限性.
尽管如此," 百万文件读取 " 的夸张可能是任何平台无限制地管理的延伸.
不能使用相同的非阻塞 API,因为 O_NONBLOCK 和朋友不处理常规文件!对于Linux,AIO 是可用的,但它有\xe2\x80\x99 自己的怪癖(即取决于文件系统,对某些操作会默默地阻塞)。
我不知道。