非阻塞模型的缺点是什么?

时间:2018-01-15 22:50:02

标签: node.js blocking nonblocking

我刚开始学习node.JS.我发现有两种模式:阻塞和非阻塞。

我知道非阻塞可以同时执行I / O请求,阻塞模型必须等待I / O响应,然后执行其他I / O请求。

但是,如果我们同时执行两个I / O请求,可能仍会有I / O中断。所以我在这里很困惑。

所以我的问题是:

  1. 看起来非阻塞模型肯定比阻塞模型好,那么为什么我们需要阻塞模型呢?

  2. 为什么没有非阻塞模型的I / O中断?

1 个答案:

答案 0 :(得分:0)

阻止I / O代码更容易编写,除非您开始使用多个线程,在这种情况下,它可能不再容易。当我编写一次性使用脚本(不是服务器)(如脚本)来处理硬盘驱动器上的一堆文件时,我有时会使用文件I / O的同步版本,例如fs.readFileSync(),因为它是只是更简单,更容易编写。仅供参考,我从不在服务器中使用同步I / O(除了在服务器初始化时),因为它在实时请求中使用时会破坏服务器的可扩展性。

作为同步I / O如何更简单的示例,require()使用同步文件I / O.如果没有,那么初始化一个有多个外部模块加载的模块(其中一些相互依赖)可能比在连续行上排列四个require()语句要复杂得多。

非阻塞I / O代码需要学习新技术才能序列化多个I / O请求(学习回调或承诺),但是允许您编写可以很好地扩展的代码,而不必担心线程同步并且没有风险多线程代码中经常出现的错误。