码迷,mamicode.com
首页 > 其他好文 > 详细

同源和异步的区别

时间:2018-08-17 01:21:17      阅读:132      评论:0      收藏:0      [点我收藏+]

标签:ror   err   queue   bsp   exec   线程   设计者   通知   机制   

同步任务(synchronous):在主线程上排队执行的任务,只有前一个任务执行完毕,才能执行后一个任务
异步任务(asynchronous):不进入主线程、而进入"任务队列"(task queue)的任务,只有等主线程任务执行完毕,"任务队列"开始通知主线程,请求执行任务,该任务才会进入主线程执行
注意:异步任务必须指定回调函数,当主线程开始执行异步任务,就是执行对应的回调函数例如ajax的success,complete,error也都指定了各自的回调函数,这些函数就会加入“任务队列”中,等待执行。

产生异步的原因:
IO设备(输入输出设备)很慢(比如Ajax操作从网络读取数据),不得不等着结果出来,再往下执行。于是JavaScript语言的设计者意识到,这时主线程完全可以不管IO设备,挂起处于等待中的任务,先运行排在后面的任务。等到IO设备返回了结果,再回过头,把挂起的任务继续执行下去

异步运行机制如下:
(1)所有同步任务都在主线程上执行,形成一个执行栈(execution context stack)。
(2)主线程之外,还存在一个"任务队列"(task queue)。只要异步任务有了运行结果,就在"任务队列"之中放置一个事件。
(3)一旦"执行栈"中的所有同步任务执行完毕,系统就会读取"任务队列",看看里面有哪些事件。那些对应的异步任务,于是结束等待状态,进入执行栈,开始执行。
  (4)主线程不断重复上面的第三步。

 

同源和异步的区别

标签:ror   err   queue   bsp   exec   线程   设计者   通知   机制   

原文地址:https://www.cnblogs.com/cpjrf/p/9490961.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!