假设我需要使用 XMLHttpRequest 下载一张图片,然后展示在网页上。
因为下载图片比较耗时,会阻塞主线程,因此会被放到网络线程中执行。
当网络线程下载完图片后,再把图片对象 img 以参数的形式传到回调函数 showPic(img)中,再把回调函数 showPic 封装为任务放到任务队列中,等待主线程空闲后执行,把图片加载到网页上
我想问下,在异步编程中,对于这种单独起一个线程执行耗时任务,为啥耗时任务执行完的后续收尾代码( showPic )非要放到任务队列中让主线程执行,为啥不干脆在自己的线程中执行。
反正对耗时任务的结果产生依赖的代码都在回调函数中,主线程中代码的执行又不依赖耗时任务的结果
而且万一主线程执行很慢,等图片下载完还没执行结束,那加载图片( showPic )不就被动延后。 而把 showPic 让网络进程执行,不就能在图片下载完后立即被加载出来,也不用管主线程是否执行完
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.