P01: 从实用角度出发的node.js学习教程

741 阅读4分钟

相关文章

node

随着前端技术的不断发展,尤其是近几年前端工程化的普及,node.js也受到越来越多的关注以及使用。本系列文章将自己研究node中的总结体会一一呈现,水平有限如有错误还请指正吗,万分感谢。

官方文档

什么是node.js?

Node.js 是一个基于 Chrome V8 引擎的 JavaScript 的 runtime

  • 它是一个Javascript运行环境

  • 依赖于Chrome V8引擎进行代码解释

  • 事件驱动

  • 非阻塞I/O

  • 轻量、可伸缩,适于实时数据交互应用

  • 单进程,单线程

node.js 的优点

  • 对于前端,有利于统一体验
  • 高并发,IO密集 性能优越

    I/O密集与CPU密集的区别

    • CPU密集: 加密解密,压缩解压等 => 运算操作密
    • I/O密集:文件操作,网络操作,数据库操作等 => 读写密集

node.js 的单线程

  • 单线程是针对系统主进程来说的,I/O操作交给底层系统多进程运行
  • node.js的单线程并不是单进程内的单线程,可以使用相关模块调用多进程(每个单核启动一个),以此完成集群。只要你需要,机器性能不会闲置

前置知识

  • 简单了解阻塞I/O以及非阻塞I/O
    • 阻塞I/O : 同步 => 下一步需要等待上一步的结果返回
    • 非阻塞I/O: 异步 => 不依赖与上一步的结果直接执行下一步
  • 进程以及线程
    • 进程: 是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位 => 类比于模块
      • 进程一般由程序,数据集合和进程控制块三部分组成。
        • 程序用于描述进程要完成的功能,是控制进程执行的指令集;
        • 数据集合是程序在执行时所需要的数据和工作区;
        • 程序控制块包含进程的描述信息和控制信息是进程存在的唯一标志
      • 进程具有的特征:
        • 动态性:进程是程序的一次执行过程,是临时的,有生命期的,是动态产生,动态消亡的;
        • 并发性:任何进程都可以同其他进行一起并发执行;
        • 独立性:进程是系统进行资源分配和调度的一个独立单位;
        • 结构性:进程由程序,数据和进程控制块三部分组成
      • 多进程: 同时运行多个进程 => 对于单核只能在同一时间点运行一个进程,多进程的实现粗略理解为多个进程的快速切换,类似于逐帧动画
    • 线程:程序执行流的最小单元,是处理器调度和分派的基本单位,是进程内一个相对独立,可调用的执行单元,于同属于一个进程的线程共享此进程的资源 => 类比于组件
      • 多线程: 用一个进程内同时运行多个线程
    • 进程与线程的区别
      1. 线程是程序执行的最小单位,而进程是操作系统分配资源的最小单位;
      2. 一个进程由一个或多个线程组成,线程是一个进程中代码的不同执行路线
      3. 进程之间相互独立,但同一进程下的各个线程之间共享程序的内存空间(包括代码段,数据集,堆等)及一些进程级的资源(如打开文件和信号等),某进程内的线程在其他进程不可见;
      4. 调度和切换:线程上下文切换比进程上下文切换要快得多
    • 扩展:为何不使用多进程而是使用多线程?
      • 线程廉价,线程启动比较快,退出比较快,对系统资源的冲击也比较小。而且线程彼此分享了大部分核心对象(File Handle)的拥有权
      • 如果使用多重进程,但是不可预期,且测试困难

环境准备

  • 打开cmd
$ node -v
vx.x.x
  • 如果未输出版本号
    • 下载node
    • 国内的各种全家桶已经锻炼了各位如何安装软件
    • 建议学习使用最新版,生产使用稳定版或跟随公司版本
    • 安装完毕再次执行命令行,得到版本信息,即准备好node环境

node初体验

// 创建文件demo.js
console.log('hello node')
// 执行文件
node demo.js

close