为了账号安全,请及时绑定邮箱和手机立即绑定

Generator与协程

Generator与协程

皈依舞 2019-02-08 18:35:18
上图能否解释JavaScript中,运用回调函数或事件监听器实现异步编程时的原理?即JS引擎是单线程的,当遇到异步任务时,浏览器会调用其他线程来执行异步任务,当辅助线程得到结果时,将相应的回到函数推送到callback queue中,当主线程的同步任务执行完毕后,通过event loop不断的将callback queue中的回调函数推入到主线程,从而完成相应的异步任务?主线程有自己的执行环境栈,那么辅助线程都有自己的执行环境栈吗?ES6中Generator实现的异步编程,其原理是对协程的实现,那协程是什么意思?在上图中有和协程相对应的地方吗?需要辅助线程吗?看了很多文章,但零零散散的,感觉越看越糊涂,希望大牛可以指点一下....谢谢...
查看完整描述

1 回答

?
潇湘沐

TA贡献1816条经验 获得超6个赞

lz的图解释的还算清楚了。不过可能在理解上面会稍微复杂一些了。
异步任务,例如ajax请求,各种请求资源,延时操作等等,其实都是在辅助线程上进行监听,如果完成,则进入任务队列,简化一下其实可以直接理解为主线程的栈,然后顺序执行。
辅助线程其实就只是一个监听返回的功能。
ES6中的Generator的实现,类似于开了多进程,但是依然同时只能进行一个进程,与辅助线程不同。

用汽车和公路举个例子。

  1. js公路只是单行道(主线程),但是有很多车道(辅助线程)都可以汇入车流(异步任务完成后回调进入主线程的任务队列);

  2. generator把js公路变成了多车道(协程实现),但是同一时间只有一个车道上的车能开(依然单线程),不过可以自由变道(移交控制权)


查看完整回答
反对 回复 2019-02-12
  • 1 回答
  • 0 关注
  • 385 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信