You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

请求提供Sequential/Parallel、Synchronous/Asynchronous四种并发任务示例及多线程归类说明

并发任务四种组合示例及疑问解答

先明确两个核心维度:

  • Sequential/Parallel:任务的执行排列方式(按顺序挨个执行/多个任务同时运行)
  • Synchronous/Asynchronous:任务是否阻塞调用者(必须等任务完成才继续/发起任务后直接执行后续逻辑,任务完成后通知结果)

一、四种组合的具体示例

1. 顺序同步(Sequential Synchronous)

特征:任务按顺序执行,每个任务运行时会卡住当前执行流,必须等它完全结束才启动下一个任务。
示例(Python):

def read_file1():
    print("开始读取文件1(同步)")
    # 同步读文件,会卡住程序直到读取完成
    with open("file1.txt", "r") as f:
        content = f.read()
    print("文件1读取完成")

def read_file2():
    print("开始读取文件2(同步)")
    with open("file2.txt", "r") as f:
        content = f.read()
    print("文件2读取完成")

# 先执行read_file1,完成后才会执行read_file2
read_file1()
read_file2()

2. 顺序异步(Sequential Asynchronous)

特征:任务按顺序发起,但每个任务发起后不会阻塞执行流,不过要等前一个异步任务完成,才会发起下一个任务。
示例(Node.js):

async function fetchUser(userId) {
    // 异步请求,发起后不会阻塞事件循环
    const response = await fetch(`/api/users/${userId}`);
    return response.json();
}

async function runTasks() {
    // 等待第一个请求返回后,再发起第二个请求
    const user1 = await fetchUser(1);
    console.log("用户1数据获取完成:", user1);
    
    const user2 = await fetchUser(2);
    console.log("用户2数据获取完成:", user2);
}

runTasks();

3. 并行同步(Parallel Synchronous)

特征:多个任务在不同执行单元(线程/进程)里同时运行,每个任务本身是同步阻塞的,但整体是并行执行状态。
示例(Java):

public class ParallelSyncDemo {
    public static void main(String[] args) throws InterruptedException {
        Thread task1 = new Thread(() -> {
            System.out.println("任务1开始(同步计算)");
            long sum = 0;
            // 同步计算,会卡住当前线程直到完成
            for (long i = 0; i < 100000000L; i++) {
                sum += i;
            }
            System.out.println("任务1完成,结果:" + sum);
        });

        Thread task2 = new Thread(() -> {
            System.out.println("任务2开始(同步计算)");
            long product = 1;
            for (long i = 1; i < 20L; i++) {
                product *= i;
            }
            System.out.println("任务2完成,结果:" + product);
        });

        // 同时启动两个线程,并行执行同步任务
        task1.start();
        task2.start();
        task1.join();
        task2.join();
    }
}

4. 并行异步(Parallel Asynchronous)

特征:多个异步任务同时发起,无需等待前一个任务完成,各自独立执行,完成后统一返回结果。
示例(Node.js):

async function fetchUser(userId) {
    const response = await fetch(`/api/users/${userId}`);
    return response.json();
}

async function runTasks() {
    // 同时发起两个异步请求,并行执行
    const userPromise1 = fetchUser(1);
    const userPromise2 = fetchUser(2);

    // 等待两个请求都完成后获取结果
    const [user1, user2] = await Promise.all([userPromise1, userPromise2]);
    console.log("用户1数据:", user1);
    console.log("用户2数据:", user2);
}

runTasks();

二、Node.js async/await的归类判断

你的判断是完全正确的。

async/await是Promise的语法糖,默认使用await会强制异步任务串行执行:必须等当前await的Promise完成,才会执行下一行代码。这种写法下,任务是异步的(不会阻塞Node.js的事件循环),但执行顺序是顺序的,属于顺序异步。

当然,如果搭配Promise.all这类API,也能用async/await实现并行异步,但标准的单await串行写法确实属于顺序异步。


三、多线程的归类

多线程是实现并行执行的载体,具体归类要看线程内执行的任务类型:

  • 如果线程内运行的是同步阻塞任务(比如计算密集型操作、同步IO),那就是并行同步(比如上面的Java多线程示例);
  • 如果线程内运行的是异步非阻塞任务(比如某些语言里线程配合异步IO框架),那就是并行异步。

日常开发中,多线程最常见的场景是并行同步——用来解决单线程被同步任务阻塞的问题,让多个同步任务在不同线程里同时执行,提升整体执行效率。

内容的提问来源于stack exchange,提问作者user22288295

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.07 08:56:09