1. JS是为什么是单线程?
什么是单线程,单线程就是同一个时间只能做一件事,JS从诞生开始,就是单线程,也是这门语言的核心特性。单线程就意味着,所有任务需要排队,前一个任务结束,才会执行后一个任务。如果前一个任务耗时很长,后一个任务就不得不一直等着。于是,所有的任务可以分为两种,同步任务和异步任务。
2. JS中的异步操作有那些?
- setTimeOut
- setInterval
- ajax
- promise
- I/O
3. 同步任务和异步任务
-
同步任务:在主线程上排队执行的任务,只有前一个任务执行完成,才能只能后一个任务
-
异步任务:不进入主线程,而是进入任务队列的任务,只有任务队列通知主线程,某个异步任务可以执行了,该任务才会进入主线程执行
-
异步执行的运行机制:
-
所有的同步任务都在主线程上执行,形成一个执行栈。
-
主线程之外,还有一个任务队列。只要异步任务有了运行结果,就在任务队列中设置一个事件
-
一旦执行栈中的所有同步任务执行完毕,系统就会读取任务队列,看还有那些事件,那些对应的异步任务。于是结束等待状态,进入执行栈,开始执行
-
主线程不断重复以上流程。