介绍node

https://elemefe.github.io/node-interview/#/sections/zh-cn/

谈谈Node中的常见概念

在学习Node的过程中,我们要了解一些基础概念。什么是Node他又解决了哪些问题以及Node的特点。包括傻傻分不清的进程和线程,同步与异步,阻塞和非阻塞,以及Node中核心的(Event Loop)事件环的概念。

1.Node是什么?

Node.js是一个基于 Chrome V8 引擎的JavaScript运行环境(runtime),Node不是一门语言是让js运行在后端的运行时,并且不包括javascript全集,因为在服务端中不包含DOM和BOM,Node也提供了一些新的模块例如http,fs模块等。Node.js 使用了事件驱动、非阻塞式 I/O 的模型,使其轻量又高效并且Node.js 的包管理器 npm,是全球最大的开源库生态系统。事件驱动与非阻塞IO后面我们会一一介绍。到此我们已经对node有了简单的概念。

2.Node解决了哪些问题?

Node在处理高并发,I/O密集场景有明显的性能优势

高并发,是指在同一时间并发访问服务器

I/O密集指的是文件操作、网络操作、数据库,相对的有CPU密集,CPU密集指的是逻辑处理运算、压缩、解压、加密、解密

Web主要场景就是接收客户端的请求读取静态资源和渲染界面,所以Node非常适合Web应用的开发。

3.进程与线程

进程是操作系统分配资源和调度任务的基本单位,线程是建立在进程上的一次程序运行单位,一个进程上可以有多个线程。

3.1 谈谈浏览器

浏览器模型

用户界面-包括地址栏、前进/后退按钮、书签菜单等

浏览器引擎-在用户界面和呈现引擎之间传送指令(浏览器的主进程)

渲染引擎,也被称为浏览器内核(浏览器渲染进程)

一个插件对应一个进程(第三方插件进程)

GPU提高网页浏览的体验(GPU进程)

由此可见浏览器是多进程的,并且从我们的角度来看我们更加关心浏览器渲染引擎

3.2 渲染引擎

渲染引擎内部是多线程的,内部包含两个最为重要的线程ui线程和js线程。这里要特别注意ui线程和js线程是互斥的,因为JS运行结果会影响到ui线程的结果。ui更新会被保存在队列中等到js线程空闲时立即被执行。

3.3 其他线程

浏览器事件触发线程(用来控制事件循环,存放setTimeout、浏览器事件、ajax的回调函数)

定时触发器线程(setTimeout定时器所在线程)

异步HTTP请求线程(ajax请求线程)