并发编程的一些概念
在并发编程领域有一些名词我经常搞混淆,被问及也无法答出个所以然。所以在这里我把这些容易搞迷糊的概念整理一下,方便查阅。
- 并发 (Concurrency)
多个任务同时段运行,一个处理器交替执行多个任务
- 并行 (Parallelism)
同时刻进行多个任务,多个处理器同时执行多个任务
并发和并行的区别主要是:并发是逻辑上的同时发生,通过区分时间片的方式来实现宏观上的并行执行;并行则是物理上在某一时刻同时运行两个(多个)任务。
并发编程为的就是尽可能在同一时段内尽可能地处理更多的任务,在底层实现上可能是多核处理器并行执行,也可能是单核心串行执行。
- 串行 (Serial)
并行的反义词,任务顺序执行
同时与之相似的还有另外几个概念:
同步 (Synchronization)
调用方需要等待被调方返回结果后才能继续执行下去
异步 (Asynchronization)
被调方在执行过程中不需要等待执行结果,而是使用异步回调的方式处理相应结果
阻塞 (Blocking)
调用方等待 IO 操作结束后再返回
非阻塞 (Non-blocking)
调用方不需要等待 IO 操作结束,调用后立即返回
同步异步和阻塞非阻塞的差别:
- 同步异步是是通讯机制,涉及到调用和被调双方;阻塞非阻塞是调用协议,只涉及调用方;
- 同步和异步关注的是操作的执行过程和结果的返回方式;阻塞和非阻塞关注的是操作的状态,根据调用操作后的状态,调用方进行不同的处理。