再理解并发、并行,异步,同步和promise,await,async

1.以下纯属个人理解

同步:程序执行完这个任务后在执行下一个任务,需要等待
异步:不用等待,任务同时执行,分为并发和并行两种实现方式
并行:多个不同任务同时异步进行
并发:通过分配时间片的方式执行多个任务,使任务看起来并行
io密集型的任务:适合单线程异步并发操作
计算量大的任务:适合多线程并行操作,可以让每一个cpu核心被最大利用

2.JavaScript两种异步方式(单线程编程语言):

参考: 玄萧 https://www.bilibili.com/read/cv13486386?from=note 出处:bilibili
单线程优点: 由于所有操作运行在一个线程中,无需考虑线程同步和资源竞争的开销,避免了线程之间的频繁切换和竞争问题,降低了开销。

2.1 传统回调函数 (Callback Function) 例如 setTimeOut

回调函数缺点: 函数回调地狱 : 一个函数执行完在执行内部另外一个,一层一层嵌套,

2.2 Promise (承诺) : 寓意这个去这个请求会在未来某一个时刻返回

解决了回调地狱的问题
例如:
fetch 向服务器请求,返回Promise对象,渲染前端,如果可以使用then 进行接受 返回的结果

    fetch("https://www.cmz.om").then((res)=>{

})

Promise优点:我们可以用链式结构将多个异步操作串联起来如下

可以不断追加类似java8 stream,这样的链式调用避免了层层嵌套,一个人东西的出现一定是解决某类问题


fetch("https://www.cmz.om").then((res)=>{

console.log(“c”)

}).then(res=>{

console.log(“m”)

}).then(res=>{

console.log(“z")

2.3 async/ await

一句话概括:

语法糖,让异步操作变简单的,这两关键字基本同根同生, 被 async 修饰的 funcation 接受 请求必须用 await


async function F(){

    const respnse = await fetc('https:///');

   const json = await response.json

}

多个Promise 使用时会打破并行,第一个执行完才执行第二个。
高效做法:

Promise.all内可以传递多个promise对象

然后再使用await ,效率会提升一倍

const [a,b]= await Promise.all([promiseA,promiseB])

如果想使用 循环中的 所有操作都并发执行可以使用 for await


async funcation f(){

    const promises  =[

    someAsyncOperator();

    someAsyncOperator();

    someAsyncOperator();

];

   for await (let result of promises){



}



}

不能在全局和 普通函数 中使用 await关键字,只能被应用异步,所以想要使用 await 就必须 用 async修饰函数

所以说就跟你对象一样 ,必须相互配合才能完成一些事情

你可能感兴趣的:(再理解并发、并行,异步,同步和promise,await,async)