1、js属于单线程
单线程就意味着,所有任务需要排队执行,前一个任务结束,后一个任务才可以执行。如果前一个任务耗时比较长,后面的任务就会一直等待
2、同步任务和异步任务(js的对于多任务的优化方法)
2.1 同步
在函数返回的时候,调用者就能够得到预期的返回值或结果
2.2 异步
在函数返回的时候,调用者不能够得到预期的返回值或结果,而是需要在将来通过一定的手段得到
3、 任务队列(消息队列、事件队列、总而言之是和异步任务相关的队列)
队列特点就是先进先出的数据结构,和排队一样,哪个异步任务完成的早,就排在最前面。无论异步操作是何时开始执行,只要异步操作执行完成,就可以进入任务队列排队
4、 事件循环(event loop)
js调控同步和异步任务的机制称为事件循环
(主线程任务全部执行完之后,任务队列中的回调函数会再次回到调用栈中执行,俗称事件循环。)
4.1 详细过程
(1) 所有的同步代码都在主线程上调用,形成了一个执行栈
(2) 除了执行栈,还会有一个”任务队列“。只要异步操作执行完成,就到任务队列排队
(3) 一旦执行栈的所有代码执行完毕,系统就会读取任务队列里的异步任务,被读取的异步任务结束等待状态,进栈和出栈
(4) 主线程不断的重复上面的三个步骤(Event loop)(重复获取信息、执行信息、再获取信息、再执行...)