并发编程的一些概念

并发编程的一些概念

在并发编程领域有一些名词我经常搞混淆,被问及也无法答出个所以然。所以在这里我把这些容易搞迷糊的概念整理一下,方便查阅。

  • 并发 (Concurrency)

    多个任务同时段运行,一个处理器交替执行多个任务

  • 并行 (Parallelism)

    同时刻进行多个任务,多个处理器同时执行多个任务

并发和并行的区别主要是:并发是逻辑上的同时发生,通过区分时间片的方式来实现宏观上的并行执行;并行则是物理上在某一时刻同时运行两个(多个)任务。

并发编程为的就是尽可能在同一时段内尽可能地处理更多的任务,在底层实现上可能是多核处理器并行执行,也可能是单核心串行执行。

  • 串行 (Serial)

    并行的反义词,任务顺序执行

同时与之相似的还有另外几个概念:

  • 同步 (Synchronization)

    调用方需要等待被调方返回结果后才能继续执行下去

  • 异步 (Asynchronization)

    被调方在执行过程中不需要等待执行结果,而是使用异步回调的方式处理相应结果

  • 阻塞 (Blocking)

    调用方等待 IO 操作结束后再返回

  • 非阻塞 (Non-blocking)

    调用方不需要等待 IO 操作结束,调用后立即返回

同步异步和阻塞非阻塞的差别:

  1. 同步异步是是通讯机制,涉及到调用和被调双方;阻塞非阻塞是调用协议,只涉及调用方;
  2. 同步和异步关注的是操作的执行过程和结果的返回方式;阻塞和非阻塞关注的是操作的状态,根据调用操作后的状态,调用方进行不同的处理。
作者

Jakes Lee

发布于

2017-05-30

更新于

2021-06-12

许可协议

评论