node系列:环境配置和介绍

如何安装node

可以从官网直接下载或者使用brew或者wget下载工具进行下载,但是更加推荐nvm管理和安装我们的node,此处我们就来介绍nvm来管理我们的node

什么nvm?

nvm 是 Node.js 的版本管理器 (version manager),可在同一台主机上安裝多个版本的 Node.js 环境,因為不同專案可能會使用不同的 Node.js 版本,那就需要通过一個版本管理器來切换不同的 Node.js 版本。

安装nvm

可用 curl 或 wget 指令使用安装脚本安装或更新 nvm:

$ curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.34.0/install.sh | bash

$ wget -qO- https://raw.githubusercontent.com/nvm-sh/nvm/v0.34.0/install.sh | bash

此安装脚本 nvm repo clone 到 ~/.nvm,并且将 source line 新增至你的 profile 设定 ( ~/.bash_profile、~/.zshrc、~/.profile 或 ~/.bashrc ):

export NVM_DIR="$HOME/.nvm"
[ -s "$NVM_DIR/nvm.sh" ] && . "$NVM_DIR/nvm.sh"  # This loads nvm
[ -s "$NVM_DIR/bash_completion" ] && . "$NVM_DIR/bash_completion"  # This loads nvm bash_completion

❗️注意这里应该将这串代码写入我们( ~/.bash_profile、~/.zshrc、~/.profile 或 ~/.bashrc )文件中

安装node

// 安装
nvm install node
// 查看本地node可用版本
nvm ls
// 切换
nvm use v10.6.3

Node是什么?

一句话说介绍node:Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行时环境

  • 所以应该要正确理解:Node.js不是一门新语言,Node是"基于V8创建一个轻量级的Web服务器并提供一套库",能够使得javascript脱离浏览器运行,简单理解就是使javascript具有服务端的能力

两个特征

Node.js 使用了一个事件驱动、非阻塞式 I/O 的模型,使其轻量又高效

  • 非阻塞I/O:non-blocking or asynchronous I/O

  • 事件驱动:Event-driven

非阻塞I/O

❗️I/O是input/output的意思,就是输入输出操作

传统的服务器语言大多是多线程、阻塞式 I/O。这也是 Node 与众不同的地方,对于传统的服务器语言,在与用户建立连接时,每一个连接都是一个线程。当有十万个用户连接时,服务器上就会有十万个线程。而阻塞式 I/O 是指,当一个线程在执行 I/O 操作时,这个线程会阻塞,等待 I/O 操作完成后继续执行,而node由于单线程的缘故,采用非阻塞I/0这种模型机制,但是性能依旧高效

  • 非阻塞I/O:发起I/O操作不等得到响应或者超时就立即返回,让进程继续执行其他操作,但是要通过轮询方式不断地去check数据是否已准备好

事件驱动

Nodejs中充斥的大量的异步,事件循环是异步实现的核心,它与浏览器中的执行模型基本保持了一致,而事件循环则是事件驱动里的概念

  • 事件驱动:简单理解从事件角度说,事件驱动程序的基本结构是由事件收集器、事件发送器和事件处理器组成

❗️Nodejs的异步是通过事件驱动模型去实现,而其核心的EventEmitter类也是实现事件驱动不可或缺的模块,我们在后续会重点分析并进行实现

JS单线程

javascript在最初设计时设计成了单线程,为什么不是多线程呢?如果多个线程同时操作DOM那岂不会很混乱?这里所谓的单线程指的是主线程是单线程的,所以在Node中主线程依旧是单线程的。

  • 单线程特点是节约了内存,并且不需要在切换执行上下文

  • 而且单线程不需要管锁的问题.

同步异步和阻塞非阻塞

同步与异步

同步和异步关注的是消息通知机制

  • 同步就是发出调用后,没有得到结果之前,该调用不返回,一旦调用返回,就得到返回值了。简而言之就是调用者主动等待这个调用的结果

  • 而异步则相反,调用者在发出调用后这个调用就直接返回了,所以没有返回结果。换句话说当一个异步过程调用发出后,调用者不会立刻得到结果,而是调用发出后,被调用者通过状态、通知或回调函数处理这个调用

阻塞与非阻塞

阻塞和非阻塞关注的是程序在等待调用结果(消息,返回值)时的状态.

  • 阻塞调用是指调用结果返回之前,当前线程会被挂起。调用线程只有在得到结果之后才会返回。

  • 非阻塞调用指在不能立刻得到结果之前,该调用不会阻塞当前线程。

区别

同步异步取决于被调用者,阻塞非阻塞取决于调用者

  • 同步阻塞

  • 异步阻塞

  • 同步非阻塞

  • 异步非阻塞

注意发起一个操作时候,并不是单方面考虑就行,而是  考虑双方的场景也就是调用者和被调用者,抓住这点就很好理解他们的区别了

总结

上述我们简单了理解Node的概念以及他重要的两个特征,理解了这一章节后,后续有助于我们理解事件驱动模型Nodejs的Event Loop等等概念

在线笔记

最近花了点时间把笔记整理到语雀上了,方便同学们阅读:语雀笔记入口:https://www.yuque.com/wanggangfeng/bsp75t/inu4gw

最后

1.看到这里了就点个在看支持下吧,你的「点赞,在看」是我创作的动力。

2.关注公众号前端壹栈,回复「1」加入前端交流群!「在这里有好多前端开发者,会讨论前端知识,互相学习」!

3.也可添加公众号【前端壹栈】,一起成长 .

原文地址:https://www.cnblogs.com/vnues/p/14300326.html