zoukankan      html  css  js  c++  java
  • 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.也可添加公众号【前端壹栈】,一起成长 .

  • 相关阅读:
    【转载】搞懂wince directshow Camera驱动不得不看的一篇文章.Initialization Sequence for Camera Drivers
    REAL210/S5PV210开发板价格表
    【原创】如何找回source insight context window?(作者:gooogleman)
    【网站】UCenter 与 DIscuz 通信失败的解决办法
    深入理解C语言指针的奥秘4
    Camera OV9650 VGA 模式输出寄存器配置表
    【转载】WinCE绝对好资料
    【震惊语录】至于你信不信,我反正信了。
    【求助】为升级gooogleman嵌入式联盟网站www.gooogleman.com做准备
    【原创】如何在wince5.0 中支持SQLCE3.5 CN——内含解决办法(作者:gooogleman)
  • 原文地址:https://www.cnblogs.com/vnues/p/14300326.html
Copyright © 2011-2022 走看看