最近在研究event loop,看了不少前辈们的文章,前辈们都说主线程在执行异步任务时,先发起调用,然后把它挂起,等他有返回值了放到任务队列里等待主线程调用回调函数获取返回值。但是,我不明白怎么个挂起法?挂起时主线程执行别的任务了,被挂起的异步任务在干嘛?在哪里?比如ajax请求,接收服务器传过来的数据时不需要线程运行它吗?有没有老哥知道的?求解。
2 回答
富国沪深
TA贡献1790条经验 获得超9个赞
主线程在执行到异步调用时,将异步的代码挂在浏览器内核提供的异步线程去执行,而主线程继续执行同步代码。
异步线程执行完成后将回调放在消息队列中。
主线程通在消息队列中通过事件循环从消息队列中取出异步的回调再去执行。
比如ajax请求。
js引擎执行到ajax请求时,由浏览器新开线程来执行这个XMLHttpRequest,而js引擎提供的主线程,会去消息队列中循环查找回调来执行。
基于个人理解答题,如有错误请直接指出,不吝赐教。
添加回答
举报
0/150
提交
取消