当前位置: 首页 > java >正文

3. 简述node.js特性与底层原理

😺😺😺 一、Node.js 底层原理(简化版)

Node.js 是一个 基于 Chrome V8 引擎构建的 JavaScript 运行时,底层核心由几部分组成:

组成部分简要说明
1.V8 引擎
将 JS 编译成机器码执行,提供高性能执行环境。
2.libuv 库
用于实现事件循环、非阻塞 I/O、线程池等。
3.C++模块
Node.js 内部很多底层模块(如 fs、net)是用 C++ 写的。
4.事件循环(Event Loop)
负责调度异步任务(定时器、I/O、Promise 等)。
5.Bindings机制
JS 和 C++ 之间的桥梁,用于 JS 调用底层 C++ 模块。

😺😺😺 二、Node.js 核心特性 + 示例 + 简单底层机制

😺😺1.事件驱动(Event-driven)

Node 使用 观察者模式 和 事件循环 来处理事件。

😺示例
下面展示一些 内联代码片

const EventEmitter = require(‘events’);
const emitter = new EventEmitter();

emitter.on(‘sayHi’, () => {
console.log(‘Hi!’);
});

emitter.emit(‘sayHi’);

😺底层原理
• EventEmitter 是 Node 封装的事件机制;
• 内部维护一个事件与回调函数的映射表;
• emit 触发时,把对应回调函数放入 事件队列,由 事件循环 取出执行。

😺😺2. 非阻塞 I/O(Non-blocking I/O)

Node 的所有 I/O 操作默认都是异步的。

😺示例

fs = require(‘fs’);
fs.readFile(‘demo.txt’, ‘utf8’, (err, data) => {
console.log(data);
});
console.log(‘Start reading file…’);

😺底层原理
• JS 发起调用后,实际由 libuv 用 C/C++ 发出系统调用;
• I/O 任务交给内核或线程池去执行;
• 操作完成后将回调放入事件队列;
• 最终由事件循环执行回调。

😺😺3.单线程+事件循环(Single Thread + Event Loop)

Node 只有一个主线程在跑 JS,但能处理高并发任务。

😺示例

setTimeout(() => {
console.log(‘Timeout called’);
}, 1000);
console.log(‘After setTimeout’);

😺底层原理
• 主线程执行 setTimeout,libuv 记录定时器;
• 到时间后将回调放入事件队列;
• 事件循环轮询队列并执行回调。

😺😺4. 模块化(CommonJS 模块系统)

Node 用 CommonJS 实现模块导入与导出。

😺示例

// math.js
module.exports.add = (a, b) => a + b;

// app.js
const math = require(’./math’);
console.log(math.add(2, 3));

😺底层原理
• Node 内部用 C++ 实现了模块加载器;
• require() 会先缓存模块,防止重复加载;
• 模块包装成 (function(exports, require, module) {…}) 执行。

😺😺5.跨平台

Node 可在 Windows、Linux、macOS 上运行。

😺底层原理
• 使用 C++ 写的 libuv 提供跨平台兼容性;
• 统一抽象了不同操作系统的 I/O 接口。

😺😺总结对照表

在这里插入图片描述

😺😺 😺三 具体源码学习
1. fs 模块(文件读写)
• JS 层:lib/fs.js
• C++ 层绑定:src/node_file.cc、src/fs_event_wrap.cc
• libuv 层:deps/uv/src/unix/fs.c / fs-poll.c
2. http 模块(网络)
• JS 层:lib/http.js
• C++ 层绑定:src/stream_base.cc、src/tcp_wrap.cc
3. 事件循环
• 核心文件:src/node.cc、src/env.cc
• 事件循环封装在 libuv:deps/uv/src/unix/core.c
4. 模块加载机制(CommonJS / ESM)
• 代码:lib/module.js、lib/internal/modules、src/module_wrap.cc

可以用 VS Code 加 ctags / ripgrep 辅助跳转分析。

4.vue.js特性
5.js原生语法 promise async/await的使用

http://www.xdnf.cn/news/10660.html

相关文章:

  • 基于Halcon深度学习之分类
  • SpringBoot系列之RabbitMQ 实现订单超时未支付自动关闭功能
  • AI+3D 视觉重塑塑料袋拆垛新范式:迁移科技解锁工业自动化新高度
  • Neo4j 数据导入:原理、技术、技巧与最佳实践
  • 深入理解Android进程间通信机制
  • uniapp 开发企业微信小程序,如何区别生产环境和测试环境?来处理不同的服务请求
  • SOC-ESP32S3部分:28-BLE低功耗蓝牙
  • Rust 学习笔记:使用自定义命令扩展 Cargo
  • 8.RV1126-OPENCV 视频中添加LOGO
  • 鸿蒙生态再添翼:身份证银行卡识别引领智能识别技术新篇章
  • Python数据可视化科技图表绘制系列教程(一)
  • 20250603在荣品的PRO-RK3566开发板的Android13下的命令行查看RK3566的温度
  • MS1023/MS1224——10MHz 到 80MHz、10:1 LVDS 并串转换器(串化器)/串并转换器(解串器)
  • 深度解析 Qt 最顶层类 QObject:继承关系与内存生命周期管理
  • ERP、OA、CRM三个企业管理软件的区别与联系
  • # [特殊字符] Unity UI 性能优化终极指南 — LayoutGroup篇
  • 微软推出 Bing Video Creator,免费助力用户轻松创作 AI 视频
  • 03.搭建K8S集群
  • 【计算机网络 第8版】谢希仁编著 第六章应用层 题型总结1 编码
  • 使用glide 同步获取图片
  • 5.Nginx+Tomcat负载均衡群集
  • SQL思路解析:窗口滑动的应用
  • 结合 AI 生成 mermaid、plantuml 等图表
  • 【开源工具】超全Emoji工具箱开发实战:Python+PyQt5打造跨平台表情管理神器
  • Hadoop复习(九)
  • 让AI弹琴作曲不再是梦:Python+深度学习玩转自动化音乐创作
  • HA: Wordy靶场
  • Apache Doris 在数据仓库中的作用与应用实践
  • Python应用continue关键字初解
  • 3.1 HarmonyOS NEXT分布式数据管理实战:跨设备同步、端云协同与安全保护