首页 > 解决方案 > 当调用同步api函数时,node.js的内部函数是否会改变

问题描述

我是 node.js 的新手,我正在尝试关联 node.js 的这两个功能,

node.js有两种api函数,即同步和异步

node.js 支持非阻塞 I/O

假设 api 在进行同步调用,node.js 的非阻塞 I/O 特性不会被使用吧?

同步和异步是否会修改 node.js 在内部工作,尤其是非阻塞 I/O 功能?

const fs = require('fs');
  
// Asynchronous function
fs.readFile('data.json', 'utf8', function (err,data) {
  if (err) {
    return console.log(err);
  }
  console.log("Below is the Data from Asynchronous function call")
  console.log(data);
});
  
// Synchronous function
var data = fs.readFileSync('data.json','utf8');
console.log("Below is the Data from Synchronous function call")
console.log(data);

标签: javascriptnode.js

解决方案


在nodejs中:

Asynchronous I/O == non-blocking I/O
Synchronous I/O == blocking I/O

虽然异步和阻塞在技术上并不完全相同,但在谈论 nodejs 中的 I/O 操作时,这两个术语通常可以互换使用,这可能是因为 nodejs 中的所有异步 I/O 操作也是非阻塞且所有同步 I/ nodejs中的O操作也是阻塞的。

将同步和异步修改 node.js 内部工作

是的,它们在内部的工作方式不同。

例如,异步文件 I/O 操作使用线程池并在单独的 OS 线程中运行文件操作,让 Javascript 线程可以自由地做其他事情(运行其他 Javascript)。

同步文件操作不使用线程池。他们只是直接调用操作系统文件操作(根据他们使用的操作系统调用的设计)将阻塞主线程直到它们完成。


推荐阅读