JS的同步和异步

"同步",一下就让人联想到"一起"这个词;"异步"呢,从字面来讲,像是"一边...一边...",比如"小明一遍吃雪糕一遍写作业",雪糕吃完了,作业也写完了,看起来完全没毛病,但是这样理解JS的同步和异步就错了!JavaScript语言是一门单线程的语言,所有任务可以分成两种,一种是同步任务,另一种是异步任务。同步任务指的是,在"主线程"上排队执行的任务,只有前一个任务执行完毕,才能执行后一个任务;异步任务指的是,不进入主线程、而进入"任务队列"的任务,只有等主线程任务执行完毕,"任务队列"开始通知主线程,请求执行任务,该任务才会进入主线程执行。

具体来说,异步执行和的运行机制如下(同步执行也是如此,因为它可以被视为没有异步任务的异步执行)

(1)所有同步任务都在主线程上执行,形成一个"执行栈"。

(2)主线程之外,还存在一个"任务队列"。只要异步任务有了运行结果,就在"任务队列"之中放置一个事件。

(3)一旦"执行栈"中的所有同步任务执行完毕,系统就会读取"任务队列",看看里面有哪些事件。那些对应的异步任务,结束等待状态,进入执行栈,开始执行。

(4)主线程不断重复上面的第三步。

猜你喜欢

转载自blog.csdn.net/qq_36379070/article/details/82528763