📜  Node.js 中的阻塞和非阻塞

📅  最后修改于: 2022-05-13 01:56:45.103000             🧑  作者: Mango

Node.js 中的阻塞和非阻塞

Node.js 基于事件驱动的非阻塞 I/O 模型。本文讨论 Node.js 中的阻塞和非阻塞是什么意思。

阻塞:是指阻塞进一步的操作,直到当前操作完成。阻塞方法是同步执行的。同步意味着程序逐行执行。程序一直等到被调用的函数或操作返回。

示例:以下示例使用 readFileSync()函数读取文件并演示 Node.js 中的阻塞

index.js
const fs = require('fs');
   
const filepath = 'text.txt';
  
// Reads a file in a synchronous and blocking way 
const data = fs.readFileSync(filepath, {encoding: 'utf8'});
  
// Prints the content of file
console.log(data);
  
// This section calculates the sum of numbers from 1 to 10
let sum = 0;
for(let i=1; i<=10; i++){
    sum = sum + i;
}
  
// Prints the sum
console.log('Sum: ', sum);


index.js
const fs = require('fs');
   
const filepath = 'text.txt';
  
// Reads a file in a asynchronous and non-blocking way 
fs.readFile(filepath, {encoding: 'utf8'}, (err, data) => {
    // Prints the content of file
    console.log(data);
});
  
  
// This section calculates the sum of numbers from 1 to 10
let sum = 0;
for(let i=1; i<=10; i++){
    sum = sum + i;
}
  
// Prints the sum
console.log('Sum: ', sum);


使用以下命令运行index.js文件:

node index.js

输出:

This is from text file.
Sum:  55

非阻塞:它指的是不阻塞进一步操作的执行的程序。非阻塞方法是异步执行的。异步意味着程序不一定会逐行执行。程序调用该函数并移动到下一个操作并且不等待它返回。

示例:以下示例使用 readFile()函数读取文件并演示 Node.js 中的非阻塞

index.js

const fs = require('fs');
   
const filepath = 'text.txt';
  
// Reads a file in a asynchronous and non-blocking way 
fs.readFile(filepath, {encoding: 'utf8'}, (err, data) => {
    // Prints the content of file
    console.log(data);
});
  
  
// This section calculates the sum of numbers from 1 to 10
let sum = 0;
for(let i=1; i<=10; i++){
    sum = sum + i;
}
  
// Prints the sum
console.log('Sum: ', sum);

使用以下命令运行index.js文件:

node index.js

输出:

Sum:  55
This is from text file.

注意:在非阻塞程序中,总和实际上在文件内容之前打印。这是因为程序不等待 readFile()函数返回并移动到下一个操作。当 readFile()函数返回时,它会打印内容。