Skip to Content
面试题库Operating System[面试题] 并行、并发、同步、异步、阻塞、非阻塞分别是什么意思?

[面试题] 并行、并发、同步、异步、阻塞、非阻塞分别是什么意思?

📖 版块 A:知识讲解版 (温故知新)

  • 并发(Concurrency)
    1. 在一段时间内,多个任务都在推进。
    2. 单核 CPU 通过时间片切换,也能实现并发。
  • 并行(Parallelism)
    1. 在同一时刻,多个任务真正同时执行。
    2. 通常依赖多核 CPU 或多台机器。
  • 同步(Synchronous)
    1. 调用方发起操作后,要等结果回来,流程才能继续。
    2. 关注的是“结果何时拿到”。
  • 异步(Asynchronous)
    1. 调用方发起操作后,不必原地等待结果。
    2. 结果往往通过回调、通知、消息等方式返回。
  • 阻塞(Blocking)
    1. 调用方线程在等待期间被挂起,不能继续做别的事情。
    2. 关注的是“线程会不会停住”。
  • 非阻塞(Non-Blocking)
    1. 调用后即使结果还没准备好,线程也不会被挂起。
    2. 可以继续做别的事情,或者稍后再轮询结果。
  • 一个特别重要的点
    1. 同步/异步阻塞/非阻塞 不是一个维度。
    2. 同步调用既可能是阻塞的,也可能是同步非阻塞的。
    3. 异步调用通常希望做到非阻塞,但二者不能简单画等号。

🎤 版块 B:面试实战版 (高手逐字稿)

Q:并行、并发、同步、异步、阻塞、非阻塞分别是什么意思?

🧠 破局思路:这道题最容易丢分的地方,是把六个概念混在一起说。高手的答法是先按维度拆开,再补一句“同步不等于阻塞,异步也不天然等于非阻塞”。

💬 高手逐字稿

这几个概念很容易混,但其实它们根本不是同一个维度。

先说并发和并行。这两个词描述的是多个任务“怎么被执行”。

并发指的是在一段时间内,多个任务都在向前推进。哪怕只有一个 CPU,也可以通过时间片轮转,在任务 A 和任务 B 之间不断切换,让它们看起来像同时在做。

并行则更严格,它要求在同一时刻,多个任务真的同时运行。这个通常需要多核 CPU,或者多台机器共同执行。

再说同步和异步。这两个词描述的是“拿结果的方式”。

同步就是我发起一个调用后,必须等它返回结果,我才能继续往下走;** 异步**则是我发起调用后,不必原地等,可以先去干别的,等结果好了再通过通知、回调、事件之类的方式回来找我。

最后说阻塞和非阻塞。这描述的是“调用方线程会不会停住”。

阻塞表示线程在等待结果期间会被挂起,什么也干不了;** 非阻塞**表示线程不会被挂住,即使这次没拿到结果,也可以先返回,稍后再试。

我觉得这道题最加分的一句话是:同步不等于阻塞,异步也不天然等于非阻塞。

比如同步调用通常很容易做成阻塞式,但也可以设计成“不断轮询直到成功”的同步非阻塞模式;异步调用往往是为了让主线程不被卡住,但异步框架内部未必完全没有阻塞。

所以总结一下:

  • 并发/并行看的是多个任务怎么执行
  • 同步/异步看的是结果怎么返回
  • 阻塞/非阻塞看的是线程会不会停住

只要把这三个维度拆开,很多网络 IO、线程模型、消息队列的问题都会一下变清楚。

最后更新于:
⏱️

登录后开始阅读

当前 MVP 版本只开放邮箱密码登录注册。完成登录后即可进入面试题内容。

还没有账号?先去注册