阻塞 和非阻塞
1.阻塞:就像单线程cpu一样,一个任务由多个小任务组成,但是只能一个任务接一个任务流程的往想下走,谁在任务排序的前面就谁先执行,执行完了进行下一个,如果遇到错误,下面的小任务就不要做了,一直卡住。
2.非阻塞:就像多线程cpu一样,一个任务由多个小任务组成,可以分开线程来做,哪个线程做分配到的任务,完成了对应的任务就行,某个线程的任务没做完那就做报对应的错,其他的不受影响。
阻塞和非阻塞,同步和异步是node.js里经常遇到的词汇,我举个简单的例子来说明:
我要看足球比赛,但是妈妈叫我烧水,电视机在客厅,烧水要在厨房。家里有2个水壶,一个是普通的水壶,另一个是水开了会叫的那种水壶。我可以:
用普通的水壶烧,人在边上看着,水开了再去看球。(同步,阻塞)这个是常规做法,但是我看球不爽了。
用普通水壶烧,人去看球,隔几分钟去厨房看看。(同步,非阻塞)这个又大问题,万一在我离开的几分钟水开了,我就麻烦了。
用会叫的水壶,人在边上看着。(异步,阻塞)这个没有问题,但是我太傻了。
用会叫的水壶,人去看球,听见水壶叫了再去看。(异步,非阻塞)这个应该是最好的。
等着看球的我:阻塞
看着电视的我:非阻塞
普通水壶:同步
会叫的水壶:异步
所以,异步往往配合非阻塞,才能发挥出威力。
代码示例:
1.阻塞代码示例:
var fs = require("fs");
var data = fs.readFileSync('input.txt'); //fs方法读取文件内容
console.log(data.toString());
console.log("程序执行结束!");
当无法读取input.txt文件时整个代码块就会死锁,无法进行。
2.非阻塞代码示例:
var fs = require("fs");
fs.readFile('input.txt', function (err, data) {
if (err) return console.error(err); //出错时报错
console.log(data.toString());
});
console.log("程序执行结束!");
当无法读取input.txt文件时依然会执行后边的代码
分享到:
相关推荐
Node.js中让异步操作变成同步的方法通常是指将非阻塞的异步调用改写为在逻辑上表现得像同步调用的方式。Node.js中异步操作是通过回调函数、Promises和async/await等技术来实现的。以下我们详细讲解如何通过这些方法...
6. **Backbone.js的Model和Collection**:了解如何将MongoDB中的文档映射到Backbone.js的Model,以及如何使用Collection管理一组Model,实现数据的同步和异步操作。 7. **Backbone.js的View和Router**:学习如何...
事件机制是Node.js的核心特性之一,它允许Node.js高效地处理多个并发任务,而这正是由于Node.js的单线程模型以及非阻塞I/O操作所实现的。事件机制的深入理解对于编写出高性能的Node.js应用至关重要,本书将介绍如何...
Node.js的核心特性是事件驱动和非阻塞I/O模型,这使得它在处理高并发请求时表现出色。在笔记中,你可能会发现作者详细解释了如何安装Node.js,以及如何使用Node命令行工具创建和运行简单的Hello World程序。 二、...
JavaScript在Node.js环境中提供了fs模块,其中的`fs.readFile()`和`fs.readFileSync()`分别对应异步和同步读取。异步版本接受两个参数:文件路径和回调函数,当读取操作完成后,回调函数会被调用,提供错误对象...
Node.js是目前非常流行的服务器端JavaScript执行环境,其最大的特点在于利用了事件驱动、非阻塞I/O模型,能够高效地处理大量并发连接,非常适合用来构建网络应用。Node.js版本10.21是该平台的一个稳定版本,其中包含...
3. **非阻塞I/O**:讲解Node.js如何通过异步操作提高性能,避免传统同步I/O导致的线程阻塞问题。 4. **模块系统**:Node.js的模块化设计是其强大之处,包括内置模块(如fs、http)的使用,以及第三方模块的安装和...
异步编程是Node.js的关键特性,包括回调函数、Promise和async/await。例如: ```javascript const fs = require('fs').promises; async function readFileAsync() { try { const data = await fs.readFile('...
2. **文件系统操作**:讲解如何使用Node.js进行文件读写、目录操作,包括异步和同步的方法,以及流(Stream)的概念和使用。 3. **网络编程**:涵盖HTTP服务器的创建、WebSocket协议的实现,以及TCP/IP套接字编程,...
- **阻塞与非阻塞操作**: 比较同步与异步操作的区别,解释为什么在 Node.js 中使用非阻塞 I/O 是重要的。 - **回调地狱**: 解释什么是回调地狱,以及如何通过 Promise 和 async/await 来避免这一问题。 - **性能考量...
事件驱动意味着Node.js通过事件循环来处理异步操作,而非阻塞I/O则让Node.js能同时处理多个请求,提高了服务器的并发能力。 2. **安装与环境配置**:手册会介绍如何在不同操作系统上下载、安装和配置Node.js开发...
Node.js的设计使得开发者能够以非阻塞的方式处理I/O操作,这对于构建高性能的网络应用至关重要。以下是关于Node.js中文件操作的详细讲解。 ### 1. 目录操作 #### 1.1 创建目录 `fs.mkdir()`用于异步创建目录,而`...
Node.js与传统后端技术的主要区别在于其基于事件和非阻塞I/O模型的编程范式。在Node.js中,服务器对客户端请求的处理采用的是异步回调函数,这与传统的同步阻塞模式大相径庭。Node.js采用单线程模型来处理并发请求,...
它是一种非阻塞的通信方式,允许程序在等待数据传输完成时执行其他任务,提高了系统的效率和响应性。以下是对异步套接字客户端的详细讲解: 1. 套接字基础:套接字是操作系统提供的接口,用于实现进程间的网络通信...
阅读本书,读者将能够了解到如何处理跨服务器的并发连接,掌握非阻塞I/O和事件驱动编程的技巧,并且学会如何在Node.js环境中支持和使用各种数据库和数据存储工具。 ### Node.js基础与安装 书中首先介绍了Node.js的...
在IT领域,Node.js以其高效、异步非阻塞I/O的优势,成为构建网络应用的热门选择。本篇将详细讲解如何使用Node.js开发一个基于Telnet协议的俄罗斯方块游戏。首先,我们需要理解什么是Telnet。 Telnet是一种古老的...
而Node.js采用了事件驱动、非阻塞I/O模型,从而大幅度提高了I/O密集型应用的性能。这种设计允许Node.js在处理大量并发连接时,仅需较少的线程,有效利用服务器资源,特别适合于高并发场景。 Node.js的另一个重要...
- **非阻塞I/O**:基于异步I/O,避免了传统多线程同步I/O可能导致的阻塞问题。 - **单线程**:Node.js 默认运行在一个工作线程中,通过事件循环处理大量并发请求。 2. **核心模块** - **`fs`模块**:用于文件...
1. **Node.js基础**:本章首先介绍Node.js的起源和特性,包括其非阻塞I/O模型的优势。学生将学习如何下载和安装Node.js,以及使用CMD或WebStorm创建基础的Web服务器,为后续学习奠定基础。 2. **JavaScript ES6**:...
Node.js的非阻塞I/O模型和事件驱动使其在处理高并发请求时表现出色,非常适合构建实时、高性能的网络应用,如电商平台。 接着是Express框架,它是基于Node.js构建Web应用的最常用框架,提供了许多方便的功能,如...