单线程处理已经安排好的任务:
因为任务逻辑是写死的,只能处理已安排好的任务,没有灵活性;
消息队列和事件循环:
- 消息队列用来保存待执行的任务队列,符合“先进先出”的特点,任务源可以是主线程中的,也可以是其他线程中的(如IO线程);
- IO线程可以接收其他进程的事件如资源加载,鼠标点击等,将事件回调作为任务加入消息队列中;
- 主线程的循环机制可以不断地从任务队列中取出任务,执行任务。
消息队列机制的缺点:
-
执行某些优先级高,且执行频率也高的任务时,由于队列前面可能还有很多任务在排队,此时使用消息队列会导致执行效率下降。
(解决:引入微任务的概念,消息队列中的每个任务被称为宏任务,每个宏任务都有自己的微任务,当前任务的宏任务执行完后会去检查微任务队列并执行完,而后才去执行下一个宏任务。因此可以把优先级较高的任务放在微任务中来解决) -
单个任务执行时间过长,会导致后续任务等待时间过长。
(解决:使用回调函数,也就是异步的方式来让任务延后执行)