20200307
Plan
- 你不知道的 js -- 异步:现在与将来
Notes
worker_threads
worker_threads可以共享内存
异步控制台
- console.log 的执行并不一定是同步的,而是由宿主环境实现的。
work-thread-example; 这个例子的 console.log 并没有按照我理想的顺序输出。不知道是不是异步控制台的原因?
事件循环
- 每一个循环称为一个 tick
- 在 node 中,process.nextTick() 在技术上不是事件循环的一部分,在下一个 tick 之前,会处理 nextTickQueue -- 另一个队列
- setTimeout 一开始没有把事件放到事件循环队列中。而是在时间结束之后才把事件放到队列中的
异步和并行
异步和并行不是同一个概念
- 异步:不阻塞当前任务
- 并行:同时发生
线程和进程
- 线程和进程独立运行
- 多个进程共享单个进程的内存
- 单线程并不意味着结果的确定性:不确定性是函数级别的(race condition)
- 多线程的不确定性是语句级别的
job queue(promise/microtask)
- 可以无限循环,造成 eventqueue 饿死
- job queue 是在当前的 tick,而 eventQueue 中取下一个 event 的话是在下一个 tick