Wil*_*ill 5 javascript multithreading asynchronous
是使用async和await原油人的主题?
许多个月前,我学会了如何在 Android 上编写多线程 Java 代码。我记得我必须创建线程、启动线程等。
现在我正在学习 Javascript,我刚刚了解了async和await。
例如:
async function isThisLikeTwoThreads() {
const a = slowFunction();
const b = fastFunction();
console.log(await a, await b);
}
Run Code Online (Sandbox Code Playgroud)
这看起来比我以前做的更简单,而且更直观。
slowFunction()将先启动,然后fastFunction()将启动,并且console.log()会等到这两个功能记录之前解决-和slowFunction()并fastFunction()在同一时间都可能运行。我希望它最终在浏览器上是否这些是单独的线程。但它看起来像粗略的多线程一样走路和说话。是吗?
是使用
async和await原油人的主题?
一点都不。它只是语法糖(真的,真的有用的糖)而不是使用承诺,而这又只是(真的,真的有用)使用回调的形式化方式。这很有用,因为您可以异步等待(不阻塞 JavaScript 主线程)本质上是异步的(如 HTTP 请求)。
如果您需要使用线程,请使用web worker、Node.js 工作线程或您的环境提供的任何多线程。根据规范(现在),一次只允许一个线程在给定的 JavaScript“领域”中工作(非常松散:您的代码正在运行的全局环境及其关联的对象等),因此只有一个线程一次可以访问该领域内的变量等,但线程可以通过消息传递(包括在它们之间传输对象而不进行复制)和共享内存进行协作。
例如:
Run Code Online (Sandbox Code Playgroud)async function isThisLikeTwoThreads() { const a = slowFunction(); const b = fastFunction(); console.log(await a, await b); }
以下是该代码在isThisLikeTwoThreads被调用时的作用:
slowFunction被同步调用并将其返回值分配给a.fastFunction被同步调用并将其返回值分配给b.isThisLikeTwoThreads到达时await a,它包装a在一个承诺中(就像你做了Promise.resolve(a))并返回一个新的承诺(不是同一个)。让我们调用包裹在a“ aPromise”周围的promise和函数“ functionPromise”返回的promise 。aPromisesettle时,如果被拒绝functionPromise,则以相同的拒绝原因拒绝,并跳过以下步骤;如果满足,则完成下一步isThisLikeTwoThreads继续包装b在 promise ( bPromise) 中并等待它解决bPromise办结,如果被拒绝functionPromise被拒绝,同样的拒绝原因; 如果应验,在代码isThisLikeTwoThreads继续通过登录的实现值aPromise和bPromise再履行functionPromise与价值undefined上面的所有工作都是在调用 的 JavaScript 线程上isThisLikeTwoThreads完成的,但它分布在多个“作业”(JavaScript 术语;HTML 规范将它们称为“任务”并详细说明了它们如何'在浏览器上处理)。如果slowFunction或fastFunction启动了一个异步进程并为此返回了一个承诺,则该异步进程(例如,浏览器执行的 HTTP 调用)可能与 JavaScript 线程并行继续,而 JavaScript 线程正在执行其他操作或(如果它也主线程上的 JavaScript 代码)可能会竞争 JavaScript 线程上的其他工作(通过将作业添加到作业队列和线程在循环中处理它们来竞争)。
但是使用 Promise 不会添加线程。:-)
| 归档时间: |
|
| 查看次数: |
254 次 |
| 最近记录: |