程序员必须了解的基础概念:同步、异步、串行、并行、并发(Javascript)

379 阅读2分钟

一直无法准确的描述同步,异步,串行,并行等的概念,并时常将这些概念混淆,相信很多朋友和我一样有这种困扰,故作此篇

首先我们从最简单的"同步"开始

同步(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 是一种用于处理异步操作的对象。