javascript - 当调用同步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);
解决方案
在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)。
同步文件操作不使用线程池。他们只是直接调用操作系统文件操作(根据他们使用的操作系统调用的设计)将阻塞主线程直到它们完成。
推荐阅读
- javascript - 如何在 React.js 中获取另一个组件的元素?
- php - 如何在 Ubuntu 上使用 Valet 进行 php-debug 扩展 - 502 Bad Gateway
- neovim - 用于预编译 nvim 二进制文件的 $VIMRUNTIME 和 $VIM 变量
- gatsby - 如何在 Gatsby V2 中将数据从 Layout 组件传递给子组件?
- azure - Azure WebApp 删除错误请求的“服务器”标头
- javascript - ASPNETZERO - 查找模式 - 如何将选定的数据返回到父模式
- python - django模型定时器删除
- javascript - Visual Studio - 如何显示自动完成建议?
- php - echo() 和 file_put_contents() 在由 crontab 作业触发时不起作用
- angular - Angular 6 Bootstrap 词缀