Node.js

总结

用libuv进行异步I/O操作
用event loop 管理事件处理顺序
用C/C++库高效处理DNS/HTTP…
用bindings让JS能和C/C++沟通
用V8运行JS
用Node.js标准库简化JS代码

在这里插入图片描述

一些有用的工具

node-dev

当文件更新时自动重启 node
不宜在生产环境使用

ts-node

让node支持直接运行TypeScript代码
不宜在生产环境使用

ts-node-dev

这个工具结合了上面两个工具
不宜在生产环境使用,但可以用来学习时使用

curl

GET请求:curl -v url
POST请求: curl -v -d “name=frank” url
设置请求头: -H
‘Content-Type:application/json’
设置动词: -X PUT
JSON请求: curl -d’{“name”:“bob”}’-H ‘Content-Type:application/json’ url
curl构造请求

stream

source → data → stream → sink
数据从source发出从stream到达sink的过程就是流。
在这里插入图片描述

管道

两个流可以用一个管道相连A末尾连接上B的开端,A的数据会流向B

常用代码stream.pipe(stream2)
链式操作

a.pipe(b).pipe(c)
// 等价于
a.pipe(b)
b.pipe(c)

在这里插入图片描述

支持的事件和方法

在这里插入图片描述

Stream分类

名称特点
Readable可读
Writable可写
Duplex可读可写(双向)
Transform可读可写(变化)

在这里插入图片描述

Readable Stream

静止态 paused 和 流动态 flowing
默认处于paused态
添加data事件监听,它就变为flowing态
删除data事件监听,它就变为paused态
pause() 可以将它变为paused
resume() 可以将它变为flowing

Writable Stream

drain通过流完成传输后,可以加点数据
调用stream.write(chunk)的时候,可能会false(数据传输过快,数据积压了)
这时不能再write,要监听drain,等drain事件触发了,我们才能继续write

finish 事件
调用stream.end()之后而且缓冲区数据都已经传给底层系统以后,
触发finish事件

数据流中的积压问题(背压 Back Pressure)

Stream 用途非常广 - 在Node.js里随处可见

进程

进程是程序的执行实例
程序在CPU上执行时的活动叫做进程
一个进程可以创建另一个进程

CPU

一个单核的CPU可以多个进程并行
指多个程序在宏观上并行,微观上串行
每个进程会出现[执行 - 暂停 - 执行]的规律
多个进程之间会出现抢资源的现象(如打印机)

阻塞

等待执行的进程

都是非运行态
一些A在等CPU资源
一些B在等I/O完成
把CPU分配给B进程,B还是在等I/O(阻塞进程)
因此,分派程序只会把CPU分配给非阻塞进程(在等I/O的都是阻塞进程)
进程的三种状态:就绪态 - 运行态 - 阻塞态
在这里插入图片描述

线程

在面向进程设计的系统中,进程是程序的基本执行实体
在面向线程设计的系统中,进程本身不是基本运行单位

引入原因

进程是执行的基本实体,也是资源分配的基本实体
导致进程的创建、切换、销毁太消耗CPU时间了
于是引入线程,线程作为执行的基本实体
而进程只作为资源分配的基本实体

概念

CPU调度和执行的最小单元
一个进程中至少有一个线程,可以有多个线程
一个进程中的线程共享该进程的所有资源
进程的第一个线程叫做初始化线程
线程的调度可以由操作系统负责,也可以由用户自己负责

子进程(child_process)

子进程的运行结果存储在系统缓存之中(最大200kb)
等到子进程运行结束以后,主进程再用回调函数读取子进程的运行结果

使用:execFile 用于执行命令

使用:spawn 用法与execFile方法类似
没有回调函数,只能通过流事件获取结果,没有最大200kb的限制
经验:能有spawn就不要用execFile

使用:fork 创建一个子进程,执行node脚本
会多出一个message事件,用于父子通信
会多出一个send方法

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Supernova_gu

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值