20200307

@xiaojingzhao

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

More