我刚开始学习node.JS.我发现有两种模式:阻塞和非阻塞。
我知道非阻塞可以同时执行I / O请求,阻塞模型必须等待I / O响应,然后执行其他I / O请求。
但是,如果我们同时执行两个I / O请求,可能仍会有I / O中断。所以我在这里很困惑。
所以我的问题是:
看起来非阻塞模型肯定比阻塞模型好,那么为什么我们需要阻塞模型呢?
为什么没有非阻塞模型的I / O中断?
答案 0 :(得分:0)
阻止I / O代码更容易编写,除非您开始使用多个线程,在这种情况下,它可能不再容易。当我编写一次性使用脚本(不是服务器)(如脚本)来处理硬盘驱动器上的一堆文件时,我有时会使用文件I / O的同步版本,例如fs.readFileSync()
,因为它是只是更简单,更容易编写。仅供参考,我从不在服务器中使用同步I / O(除了在服务器初始化时),因为它在实时请求中使用时会破坏服务器的可扩展性。
作为同步I / O如何更简单的示例,require()
使用同步文件I / O.如果没有,那么初始化一个有多个外部模块加载的模块(其中一些相互依赖)可能比在连续行上排列四个require()
语句要复杂得多。
非阻塞I / O代码需要学习新技术才能序列化多个I / O请求(学习回调或承诺),但是允许您编写可以很好地扩展的代码,而不必担心线程同步并且没有风险多线程代码中经常出现的错误。