• 《深入浅出Node.js》第1章 Node简介


    @by Ruth92(转载请注明出处)

    第1章 Node简介

    一、Node的起源

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

    选择JavaScript的原因:高性能、符合事件驱动、没有历史包袱。

    • JavaScript 的开发门槛低;
    • JavaScritp 无历史包袱,导入非阻塞I/O库没有额外阻力;
    • JavaScript 在浏览器中有广泛的事件驱动方面的应用,满足基于事件驱动的需求;
    • Chrome 浏览器的 JavaScript 引擎 V8 性能最佳。

    Node与浏览器的对比:

    Chrome浏览器和Node的组件构成

    除了 HTML、WebKit 和显卡这些 UI 相关技术没有支持外,Node 的结构与 Chrome 十分相似。

    它们都是基于事件驱动的异步架构,浏览器通过事件驱动来服务界面上的交互,Node 通过事件驱动来服务 I/O。

    二、Node的特点

    1. 异步 I/O
    • 在 Node 中,我们可以从语言层面很自然地进行并行 I/O 操作。
    • 每个调用之间无需等待之前的 I/O 调用结束。在编程模型上可以极大提升效率。
    1. 事件与回调函数
    • 回调函数式最好的接受异步调用返回数据的方式。
    1. 单线程

    Node 保持了 JavaScritp 在浏览器中单线程的特点。并且在 Node 中,JavaScript 与其余线程是无法共享任何状态的。

    • 单线程的最大好处:
      • 不用像多线程编程那样处处在意状态的同步问题,这里没有死锁的存在,也没有线程上下文交换所带来的性能上的开销。
    • 单线程的弱点:
      • 无法利用多核 CPU;
      • 错误会引起整个应用退出,应用的健壮性值得考验;
      • 大量计算占用 CPU 导致无法继续调用异步 I/O。

    浏览器中 JavaScript 与 UI 共用一个线程,JavaScript 长时间执行会导致 UI 的渲染和响应被中断。

    1. 跨平台

    Node基于libuv实现跨平台的架构示意图

    目前,libuv 已经成为许多系统实现跨平台的基础组件。

    三、Node 的应用场景

    1. I/O 密集型

    I/O 密集的优势:主要在于 Node 利用事件循环的处理能力,而不是启动每一个线程为每一个请求服务,资源占用极少。

    1. CPU 密集型:

    挑战:由于 JavaScript 单线程的原因,如果有长时间运行的计算(比如大循环),将会导致 CPU 时间片不能释放,使得后续 I/O 无法发起。

    是否适用?——>只需做到合理调度或实现 C/C++ 扩展等

    1. 与遗留系统的和平共处

    2. 分布式应用:高效并行 I/O


    Scoop It and Enjoy the Ride!
  • 相关阅读:
    oracle的分析函数over 及开窗函数
    LOL源代码娜美皮肤免费领取
    vue实用组件——圆环百分比进度条
    dom操作获取长/宽/距离等值的若干方法
    dom操作获取元素的若干方法
    dom操作操作元素属性的若干方法
    vue实用组件——表格
    vue实用组件——页面公共头部
    js10种循环方法
    dom操作创建节点/插入节点
  • 原文地址:https://www.cnblogs.com/Ruth92/p/5827648.html
Copyright © 2020-2023  润新知