持续创作,加速成长!这是我参与「AdminJS · 10 月更文挑战」的第5天,点击查看活动详情
Node.js的架构
作为一个服务端框架,Node.js
在运行时有许多依赖,其中最重要的两个是V8
引擎和libuv
库
-
V8
引擎使得Node.js
能够运行JavaScript
代码,是用JavaScript
和C++
开发的 -
libuv
库使得Node.js
能够进行文件操作、网络操作等,是用C++
开发的。其内部实现了事件循环和线程池:- 事件循环负责处理简单的任务,比如执行回调函数、网络
IO
等 - 线程池负责处理更加复杂的任务,比如文件访问、压缩等
- 事件循环负责处理简单的任务,比如执行回调函数、网络
-
其它依赖
http-parser
:用于解析http
请求和响应c-ares
:异步DNS
解析库,可以和事件循环统一起来,实现DNS
的非阻塞异步解析crypto(OpenSSL)
:用于实现安全通信,加密解密zlib
:用于压缩和解压缩
Node 进程,线程和线程池
当我们运行Node.js
时,计算机后台便会开启一个Node.js
的进程(Node.js
本身也提供了用于进程管理的API)
与此同时,Node.js
的运行是单线程的,也就是说不管有多少用户在访问应用程序,所有指令都在一个线程中执行,这使得它非常容易被堵塞。具体来说,当Node.js
被启动时,会在单线程中依次执行以下操作:
初始化项目