python多线程(一)

2 阅读3分钟

并发、并行、同步、异步、进程、线程详解

这些是操作系统和并发编程中的核心概念。下面逐一解释,并说明它们之间的关系。

1. 进程(Process)与线程(Thread)

进程:程序的一次执行实例,拥有独立的地址空间、内存、文件描述符等资源。进程间相互隔离,通信需要特殊机制(如管道、队列、共享内存)。

线程:进程内的一个执行单元,多个线程共享进程的资源(如内存、文件等),因此通信更简单,但需注意同步问题。

对比项进程线程
资源占用独立内存,开销大共享内存,开销小
切换速度较慢(涉及地址空间切换)较快
通信方式进程间通信(IPC)复杂共享变量,需加锁
崩溃影响一个进程崩溃不影响其他进程一个线程崩溃可能导致整个进程退出

2. 并发(Concurrency)与并行(Parallelism)

并发:逻辑上同时处理多个任务,但实际物理上可能是在单个 CPU 上通过快速交替执行(时间片轮转)实现的。关注的是结构:多个任务能在同一时间段内开始、执行、完成。

并行:物理上真正同时执行多个任务,需要多核 CPU 或多个 CPU。每个任务在独立的核心上同时运行。

经典比喻:

  • 并发:一个人同时吃三个馒头,一次咬一口,轮流咬。
  • 并行:三个人同时吃三个馒头,每人吃自己的。

关系:并发是并行的基础(但并发不一定并行),并行需要硬件支持。

3. 同步(Synchronous)与异步(Asynchronous)

这是描述函数调用或任务通知方式的术语。

同步:发起调用后,必须等待调用完成并拿到结果,才能继续后续操作。调用方被阻塞。

异步:发起调用后,不等待结果,立即返回;调用方可以继续做其他事。当任务完成时,通过回调、事件或 Future 等方式通知调用方。

例子:

  • 同步:你打电话给客服,一直在线等待直到问题解决。
  • 异步:你留言并留下联系方式,客服解决后回电给你,你期间可以干别的事。

4. 它们之间的关系

  • 并发/并行 描述的是任务执行的方式(交替或同时)。
  • 同步/异步 描述的是调用或通知的模型(阻塞等待或不阻塞)。
  • 进程/线程任务的载体,是实现并发或并行的基本单元。

常见组合:

  • 同步阻塞:最常见的函数调用,调用者等待结果。
  • 异步非阻塞:回调或 Promise 风格,调用者立即返回,完成后通知。
  • 并发可以用多线程/多进程实现,也可以用异步 I/O(单线程事件循环)实现。

5. 总结表

概念核心含义
进程资源分配的基本单位,独立内存
线程CPU 调度的基本单位,共享进程资源
并发逻辑上同时处理多个任务(可能交替)
并行物理上同时执行多个任务(需要多核)
同步调用等待结果,阻塞
异步调用不等待结果,通过通知获取结果