美文网首页
深入浅出Node.js学习笔记(一)

深入浅出Node.js学习笔记(一)

作者: iBleakNight | 来源:发表于2019-12-27 16:31 被阅读0次

    Node简介

    1.Node的诞生历程

    Node诞生于2009年3月。

    2.Node的命名与起源

    Node的别名:Nodejs、NodeJS、Node.js。

    2.1为什么是JavaScript

    设计高性能Web服务器的几个要点:事件驱动、非阻塞I/O。

    考虑到高性能、符合事件驱动、没有历史包袱这三个主要原因,JavaScript成为了Node的实现语言。

    2.2为什么叫Node

    Node可以构建服务器、客户端、命令行工具,Node发展为一个强制不共享任何资源的单线程、单进程系统,其目的是成为一个构建快速、可伸缩的网络应用平台。

    Node自身非常简单,通过通信协议来组织许多Node,非常容易通过扩展来达到构建大型网络应用的目的。

    每一个Node进程都构建成这个网络应用的一个节点,这是它名字所含意义的真谛。

    3.Node给JavaScript带来的意义

    Node打破了过去JavaScript只能在浏览器运行的局面,前后端编程环境统一,可大大减少前后端转换所需要的上下文交换代价。

    4.Node的特点

    作为后端JavaScript运行的平台,Node保留前端浏览器JavaScript中那些熟悉的接口,没有改变语言的任何特性,依旧依赖作用域和原型链,区别在于它将前端中广泛运用的思想迁移到服务端。

    4.1异步I/O

    异步调用中对于结果值的捕获是符合"Don't call me, I will call you"原则。

    在Node中,绝大多数的操作都以异步的方式进行调用。

    4.2事件与回调函数

    事件的编程方式具有轻量级、松耦合、只关注事务点等优势。

    回调函数无处不在,在JavaScript中,函数作为一等公民,可以将函数作为对象传递给方法作为实参进行调用。

    4.3单线程

    在Node中,JavaScript与其他线程无法共享任何状态。

    单线程的优点:

    1. 不用像多进程编程那样处处在意状态的同步问题;
    2. 没有死锁;
    3. 没有线程上线文交换所带来的的性能的开销;

    单线程的缺点:

    1. 无法利用多核CPU;
    2. 错误会引起整个应用退出,应用的健壮性值得考验;
    3. 大量计算占用CPU导致无法继续调用异步I/O;

    Web Works能够创建工作线程来进行计算,以解决JavaScript大计算阻塞UI渲染的问题。

    工作线程为了不阻塞主线程,通过消息传递的方式来传递运行结果,这也使得工作线程不能访问到主线程中的UI。

    Node解决单线程中大计算量的方式:child_process(子线程)。

    子进程:通过计算分发到各个子进程,可以将大量计算分解掉,然后通过进程之间的事件消息来传递结果,这可以很好地保持应用模型的简单和低依赖。

    4.4跨平台

    Node可以在Windows和*nix平台运行,得益于在操作系统与Node上层模块系统之间构建一层平台层架构,即libux。

    5.Node的应用场景

    Node的应用场景主要分为I/O密集型和CPU密集型。

    5.1I/O密集型

    Node面向网络且擅长并行I/O,能够有效地组织起更多的硬件资源,从而提供更多更好的服务。

    I/O密集型的优势:

    利用事件循坏的处理能力,而不是启动每一个线程为每一个请求服务,资源占有极少。

    5.2是否不擅长CPU密集型业务

    Node优秀的运算能力主要来自V8的深度性能优化。

    CPU密集型应用给Node带来的挑战:

    由于JavaScript单线程的原因,如果长时间运行的计算(如大循环),将导致CPU时间片不能释放,使得后续I/O无法发起。但是适当调整和分解大型运算任务为多个小任务,使得运算能够适时释放,不阻塞I/O调用的发起,这样既可以同时受到并行异步I/O的好处,又能充分利用CPU。

    Node充分利用CPU的方式:

    1. 通过编写C/C++扩展的方式高效的利用CPU,将一些V8不能做到性能极致的地方通过C/C++来实现;
    2. 通过子进程的方式,利用进程间的消息传递结果,将计算和I/O分离;

    CPU密集不可怕,如何合理调度是诀窍。

    5.3与遗留系统和平共处

    旧系统具有非常稳定的数据输出,持续为传统网站服务,同时为移动版提供数据源,Node将该数据源当做数据接口,发挥异步并行的优势。

    5.4分布式应用

    阿里巴巴的数据平台。

    5.5Node的使用者

    Node的使用者:

    1. 前后端编程环境统一;(雅虎)
    2. Node带来的高性能I/O用于实时应用;(腾讯,花瓣网,蘑菇街)
    3. 并行I/O使得使用者可以更高效地利用分布式环境;(阿里巴巴,eBay)
    4. 并行I/O,有效利用稳定接口提升Web渲染能力;(雪球财经,LinkedIn)
    5. 云计算平台提供Node支持;(微软,阿里云,百度云)
    6. 游戏开发领域;(网易)
    7. 工具类应用;

    相关文章

      网友评论

          本文标题:深入浅出Node.js学习笔记(一)

          本文链接:https://www.haomeiwen.com/subject/yfmdoctx.html