Node基础概念,先了解一下

Nodejs是基于Chrome V8引擎的服务器端JavaScript运行环境,也就是说可以在浏览器之外的主机上运行JavaScript。

NodeJS

Nodejs有三部分组成:标准库、中间层和底层库。

标准库:是给开发人员直接调用的API,比如HTTP模块;

中间层:为什么要有中间层呢?主要是因为NodeJS底层采用C语言来实现,标准库的JavaScript不能直接和C通信,只能通过中间层来完成通信。总的来说,中间层是链接标准库和底层的通道。

底层库:由C/C++实现,包含了V8、libuv、C-ares、OpenSSL、zlib。是nodeJs运行的关键。

V8引擎,为了提高JavaScript的运行效率,采用了提前编译,把JavaScript编译为原生的机器码。V8引擎采用C++编写。

libuv:使用C语言编写,提供了非阻塞的文件系统、DNS、网络、子进程、管道、信号、轮询和流式处理机制。

NodeJS通过中间层,把JavaScript传给底层的V8引擎进行解析,然后通过libuv进行调度,最终返回给调用NodeAPI的应用。

C-ares:用来处理异步DNS的请求库。

OpenSSL:通用的加密库,用于网络传输中TLS和SSL协议的实现,比如Nodejs中的tls、crypto模块。

zlib:压缩和解压的底层模块。

一些概念

1、Node 的核心就是事件驱动,把I/O操作作为事件响应,而不是阻塞操作。

2、Nodeji采用单线程模型,只需要轻量级的线程就可以处理大量的请求。Node把所有的I/O操作都放在事件队列中,一但事件出现,Node就会依次处理它们。

如果采用多个线程的话,增加开销和复杂性。因为创建、销毁线程以及在线程之间切换都产生性能开销的。

3、非阻塞I/O:传统的I/O操作,比如发生数据读写的时候,程序会被阻塞,需要等到数据读写完成后,才能进入下一个操作。然而Node的I/O操作是非阻塞的,当某一个I/O操作发生后,直接回调对应的函数,不会阻塞下一个操作。

4、事件循环:Node采用了事件循环的方式,在工作线程池中维护一个任务队列。当接收到一个请求后,会将请求放到任务队列中,然后继续接收其他的事件。通过事件循环流程来对任务队列的事件进行处理。如图所示:

在这个草图中,计时器阶段,是处理setTimeout和setInterval设置的函数。

回调就是运行挂起的回调函数;

轮询:检索传入的I/O事件并且运行和I/O相关的回调函数。

检查:完成轮询后立即运行回调

关闭回调就是关闭事件和回调。

篇幅短点,更容易记住!!!

相关推荐
sq8002 小时前
listr2 入门教程2-Node.js持续显示任务运行状态
node.js
koooo~15 小时前
node.js中的fs与path模块
node.js
刘大猫.19 小时前
npm ERR! cb() never called!
前端·npm·node.js·npm install·npmm err·never called
李先生9301 天前
Puppeteer最新迁移和服务
前端·node.js
FogLetter1 天前
SQLite3入门指南:轻量级数据库的奇妙冒险
后端·node.js
bingbingyihao2 天前
Node.js 模拟 Linux 环境
linux·node.js
吳所畏惧2 天前
NVM踩坑实录:配置了npm的阿里云cdn之后,下载nodejs老版本(如:12.18.4)时,报404异常,下载失败的问题解决
前端·windows·阿里云·npm·node.js·batch命令
JS_Love2 天前
nodejs 手动实现 multipart/byteranges 分块下载
node.js
白一梓2 天前
Node.js 流全解
node.js
门前云梦3 天前
ollama+open-webui本地部署自己的模型到d盘+两种open-webui部署方式(详细步骤+大量贴图)
前端·经验分享·笔记·语言模型·node.js·github·pip