相关文章
- P01: 从实用角度出发的node.js学习教程
- P02:node基本使用
- P03:node内置模块path
- P04:nodeAPI 之 Buffer
- P05:node内置模块 之 events
- P06:node内置模块 fs(1)
- P07:node内置模块 fs(2)
- P08:node实现静态服务器 ~ 创建项目
- P09:node实现静态服务器 ~ hello http
- P10:node实现静态服务器 ~ 静态读取文件或文件夹
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: 异步 => 不依赖与上一步的结果直接执行下一步
- 进程以及线程
- 进程: 是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位 => 类比于模块
- 进程一般由程序,数据集合和进程控制块三部分组成。
- 程序用于描述进程要完成的功能,是控制进程执行的指令集;
- 数据集合是程序在执行时所需要的数据和工作区;
- 程序控制块包含进程的描述信息和控制信息是进程存在的唯一标志
- 进程具有的特征:
- 动态性:进程是程序的一次执行过程,是临时的,有生命期的,是动态产生,动态消亡的;
- 并发性:任何进程都可以同其他进行一起并发执行;
- 独立性:进程是系统进行资源分配和调度的一个独立单位;
- 结构性:进程由程序,数据和进程控制块三部分组成
- 多进程: 同时运行多个进程 => 对于单核只能在同一时间点运行一个进程,多进程的实现粗略理解为多个进程的快速切换,类似于逐帧动画
- 进程一般由程序,数据集合和进程控制块三部分组成。
- 线程:程序执行流的最小单元,是处理器调度和分派的基本单位,是进程内一个相对独立,可调用的执行单元,于同属于一个进程的线程共享此进程的资源 => 类比于组件
- 多线程: 用一个进程内同时运行多个线程
- 进程与线程的区别
- 线程是程序执行的最小单位,而进程是操作系统分配资源的最小单位;
- 一个进程由一个或多个线程组成,线程是一个进程中代码的不同执行路线
- 进程之间相互独立,但同一进程下的各个线程之间共享程序的内存空间(包括代码段,数据集,堆等)及一些进程级的资源(如打开文件和信号等),某进程内的线程在其他进程不可见;
- 调度和切换:线程上下文切换比进程上下文切换要快得多
- 扩展:为何不使用多进程而是使用多线程?
- 线程廉价,线程启动比较快,退出比较快,对系统资源的冲击也比较小。而且线程彼此分享了大部分核心对象(File Handle)的拥有权
- 如果使用多重进程,但是不可预期,且测试困难
- 进程: 是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位 => 类比于模块
环境准备
- 打开cmd
$ node -v
vx.x.x
- 如果未输出版本号
- 下载node
- 国内的各种全家桶已经锻炼了各位如何安装软件
- 建议学习使用最新版,生产使用稳定版或跟随公司版本
- 安装完毕再次执行命令行,得到版本信息,即准备好node环境
node初体验
// 创建文件demo.js
console.log('hello node')
// 执行文件
node demo.js
close