【Node.js学习笔记】-00 Node.js简介

时间:2021-09-08 20:46:11

1.什么是Node.js?

  • Node.js不是JS应用,不是语言,也不是框架,只是JS的运行环境
  • 事件驱动,非阻塞I/O,简单说就是每个函数都是异步的,Node.js内部隐藏了非阻塞I/O的具体细节,使得我们可以轻松编写高性能的WEB应用,所以它是轻量且高效的
  • 使用npm作为包管理器

2.基本原理

下图为Node.js早期的架构图。此图简要介绍了Node.js 是基于Chrome V8引擎构建的,由事件循环Event Loop) 分发I/O任务,最终工作线程Work Thread) 将任务丢到线程池Thread Pool)里去执行,而事件循环只需要等待执行结果就可以了。

【Node.js学习笔记】-00 Node.js简介

梳理思路:

  • Chrome V8是JavaScript引擎
  • Node.js内置Chrome V8引擎,故而Node.js使用JavaScript语法
  • JavaScript语言最大的特点就是单线程,也就意味着同时只能做一件事——“专一
  • 单线程就意味着所有任务需要排队,前一个任务结束才能执行后一个任务,如果前一个任务耗时很长,后一个任务就只能在那傻等着
  • 排队有两种情况导致:1)因为计算量大,CPU忙不过来——情有可原  
  •                                   2)CPU闲着,因为I/O很慢,不得不等着出结果出来了再往下执行——浪费青春
  • 将等待中的I/O任务放到事件循环(Event Loop)里
  • 由事件循环(Event Loop)将I/O任务放到线程池中
  • 只要有资源就尽力执行

在解决并发的问题上,异步是最好的解决方案,这就好比是排队和叫号机

  • 排队:在排队的时候,什么也干不了只能等
  • 叫号机:先取号,等轮到你的时候系统会通知你(Don't call me, I will call you),在这中间,你可以做任何想做的事

对比Node.js  来看:

    取号——写代码

    叫号机——Event Loop

    柜员——线程池(Thread Pool)

说Node.js是单线程是因为接受任务的时候是单线程的,不需要进程/线程切换上下文的成本,很高效。但在执行具体的任务时是多线程的——单接多处