来了解NodeJS的事件循环原理吧:图文+代码

Node.js的架构

作为一个服务端框架,Node.js在运行时有许多依赖,其中最重要的两个是V8引擎和libuv

  • V8引擎使得Node.js能够运行JavaScript代码,是用JavaScriptC++开发的* 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被启动时,会在单线程中依次执行以下操作:

初始化项目👉执行顶层代码(不在回调函数中)👉加载模块👉注册回调函数👉开启事件循环(回调函数中)

  • 其中,事件循环扛起了一片天,会执行程序中的大部分任务,但有些任务确实过于复杂,如果在事件循环中执行,就会阻塞整个线程。time for 线程池
  • 线程池提供了4个与主线程完全分开的线程&#x
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值