消息队列和事件循环系统

327 阅读1分钟

单线程处理已经安排好的任务:

因为任务逻辑是写死的,只能处理已安排好的任务,没有灵活性;

消息队列和事件循环:

  1. 消息队列用来保存待执行的任务队列,符合“先进先出”的特点,任务源可以是主线程中的,也可以是其他线程中的(如IO线程);
  2. IO线程可以接收其他进程的事件如资源加载,鼠标点击等,将事件回调作为任务加入消息队列中;
  3. 主线程的循环机制可以不断地从任务队列中取出任务,执行任务。

消息队列机制的缺点:

  1. 执行某些优先级高,且执行频率也高的任务时,由于队列前面可能还有很多任务在排队,此时使用消息队列会导致执行效率下降。
    (解决:引入微任务的概念,消息队列中的每个任务被称为宏任务,每个宏任务都有自己的微任务,当前任务的宏任务执行完后会去检查微任务队列并执行完,而后才去执行下一个宏任务。因此可以把优先级较高的任务放在微任务中来解决)

  2. 单个任务执行时间过长,会导致后续任务等待时间过长。
    (解决:使用回调函数,也就是异步的方式来让任务延后执行)