Generator与协程

https://img4.mukewang.com/5c6287ec0001f5a206010527.jpg

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

皈依舞
浏览 386回答 1
1回答

潇湘沐

lz的图解释的还算清楚了。不过可能在理解上面会稍微复杂一些了。异步任务,例如ajax请求,各种请求资源,延时操作等等,其实都是在辅助线程上进行监听,如果完成,则进入任务队列,简化一下其实可以直接理解为主线程的栈,然后顺序执行。辅助线程其实就只是一个监听返回的功能。ES6中的Generator的实现,类似于开了多进程,但是依然同时只能进行一个进程,与辅助线程不同。用汽车和公路举个例子。js公路只是单行道(主线程),但是有很多车道(辅助线程)都可以汇入车流(异步任务完成后回调进入主线程的任务队列);generator把js公路变成了多车道(协程实现),但是同一时间只有一个车道上的车能开(依然单线程),不过可以自由变道(移交控制权)
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript