一直无法准确的描述同步,异步,串行,并行等的概念,并时常将这些概念混淆,相信很多朋友和我一样有这种困扰,故作此篇
首先我们从最简单的"同步"开始
同步(Synchronous) :
- 同步是指任务按照顺序执行,一个任务完成后才能开始下一个任务
- 在同步操作中,主任务需要等待所有子任务完成,然后才能继续执行
举个例子
同步操作就像做一道清蒸鱼,在吃清蒸鱼(主任务)之前必须先依次进行杀鱼,刮鳞,清蒸这几个步骤(子任务),每个步骤都要等待前一个步骤完成才能进行,只有当鱼熟了(所有子任务完成),才能吃到鱼.
异步(Asynchronous) :
- 异步指的是任务可以并行执行,不需要等待其他任务的完成。
- 在异步操作中,主任务可以继续执行,而不必等待子任务完成。
举个例子
异步操作就像是当你哪天作业没写完(写作业是主任务)的时候在宿舍,打电话托舍友带晚饭(发起异步请求),接着继续肝作业 当然,可能你的室友没听清你的需求或者其他原因,造成了没把晚饭带回的情况(异步请求失败).
串行、并行与并发
串行(Serial):
- 串行是同步的一种实现
- 多个任务按顺序执行,完成一个之后才能进行下一个。
- 在程序中,串行执行的任务一个一个按顺序完成。
并发(Concurrent):
-
多个任务在同一个时间段内同时执行。
-
如果是单核心计算机,CPU 会不断地切换任务来完成并发操作。
并行(Parallel):
- 多任务在同一个时刻同时执行,计算机需要有多核心,每个核心独立执行一个任务,多个任务同时执行,不需要切换。
并发、并行是异步的两种实现方式
JavaScript是一门单线程语言故我们无法进并行操作,只需了解和掌握异步就行
在Javascript中我们经常会使用异步请求来实现许多操作
1. 使用 setTimeout:
-
setTimeout是一个异步函数,它在指定的时间后执行回调函数。 -
例如,以下代码会在 2 秒后输出 “Let us see what happens”:
setTimeout(() => { document.write("Let us see what happens"); }, 2000);
2. 使用 Promise:
Promise是一种用于处理异步操作的对象。