同步 vs 异步 最直白的区别
让我们用更简单的方式解释:
同步 vs 异步 最直白的区别
想象你(父进程)要完成200份作业(计算500000000-500000199的素数):
-
同步方式(单进程)
- 你亲自做第1份 → 做完才做第2份 → … → 做完第200份
- 特点:必须等前一份做完才能开始下一份,严格按照顺序。
-
异步方式(多进程)
- 你雇了200个帮手(fork()创建子进程)
- 每个帮手同时独立完成1份作业
- 特点:所有作业同时进行,谁先做完谁先喊"完成"(printf输出)
你的代码关键点分析
for (int i = MIN; i < MAX; i++) {pd = fork(); // 雇帮手(创建子进程)if (pd == 0) { // 帮手的工作(子进程计算素数)return 0; // 做完就下班} // 你(父进程)继续雇下一个帮手,不等当前帮手完成
}
- 为什么是异步?
父进程的for
循环只管"雇人"(fork),不等待帮手是否完成工作,雇完200人就直接进入最后的wait
循环。
判断同步/异步的终极技巧
看这个循环:
for (...) {fork(); // 创建子进程后// 这里有没有立即wait? → 没有就是异步!
}
- 如果有
wait
:同步(等一个孩子做完才继续循环) - 没有
wait
:异步(继续循环创建更多进程)
你的代码执行流程
父进程
├─ 循环1:创建子进程1(计算500000000)→ 子进程1独立运行
├─ 循环2:创建子进程2(计算500000001)→ 子进程2独立运行
├─ ...
└─ 循环200:创建子进程200 → 子进程200独立运行
最后父进程才用wait()等所有孩子结束
这就是典型的异步模式!