JavaScript的单线程模型

  • 单线程是指单个脚本只在一个线程上运行,其他线程配合
  • js使用单线程是因为对于网页脚本语言来讲,多线程过于复杂,有历史原因
  • js语言本身不慢,慢的是IO输入输出操作,因此将一些耗时很长的操作挂起执行后面的任务,等到IO操作有结果再执行。

同步任务和异步任务

  • 同步任务是没有被挂起的任务,需要排队逐个执行
  • 异步任务是被引擎挂起,不在主线程而进入事件队列的任务
  • Ajax操作可以是异步也可以是同步

任务对列和事件循环

  • 任务队列是引擎提供的一个放异步任务的线程,有多个。
  • js执行完所有的同步任务后,就会去看任务队列的异步任务,满足条件以后进入主线程称为同步任务,任务队列清空以后程序结束。
  • js如何知道异步任务可以执行了?答案是引擎在同步任务执行完后会有一个轮询机制,一遍遍的检查异步任务是否得到了结果,这种机制就是事件循环“Event Loop”

异步操作模式

  • 回调函数
    //f2必须等到f1执行完以后再执行
    function f1(callback) {
    // ...
    callback();
    }
    function f2() {}
    f1(f2);
  • 事件监听
    //当f1触发'done'事件以后,执行f2
    f1.on('done', f2);
  • 发布订阅
    发布订阅模式又称观察者模式,中心思想就是每一个任务执行完以后向信号中心发布一个信号,告诉信号中心它已经执行完了,其他任务订阅信号中心得知自己什么时候可以执行。

异步操作流程控制简介

  • 串行执行:每次只允许一个异步任务执行
  • 并行执行:允许所有异步任务同时执行
  • 串行并行结合:每次只允许规定个数的异步任务同时执行。