同步与异步、阻塞与非阻塞、多线程、协程超详细讲解(Python并发编程从入门到精通)

📌 专栏:Python高阶进阶全套教程

🔥 阅读收获:彻底搞懂并发核心四大概念:同步/异步、阻塞/非阻塞、多线程、协程,区分适用场景、看懂底层区别、写出高效并发代码,面试不再卡壳。

💡 适合:期末作业、面试八股、后端进阶、爬虫提速、IO优化


一、先搞懂四个基础核心概念(重中之重)

很多人学不会并发,是因为分不清这两组概念:

同步 / 异步任务的提交方式(怎么发起任务)

阻塞 / 非阻塞程序的等待状态(任务卡住不卡住)

1.1 同步(Sync)

顺序执行,做完一个再做下一个

发起任务后,程序必须等待任务完成,才能执行下一行代码。

优点:逻辑简单、不乱、无数据冲突

缺点:效率极低,IO等待全程干等

1.2 异步(Async)

发起任务不等待,直接继续往下执行

任务交给后台执行,主线程继续干活,任务完成后回调/返回结果。

优点:极高效率,充分利用等待时间

缺点:逻辑复杂、需要处理回调、异步锁

1.3 阻塞(Block)

遇到IO操作(网络、文件、睡眠),程序卡住、放弃CPU,原地等待。

生活例子:烧水时盯着水壶,啥也不干,等水开。

1.4 非阻塞(Non-Block)

遇到IO不卡死,继续执行其他任务,隔一会检查是否完成。

生活例子:烧水同时玩手机、扫地、看书,水开再处理。


二、四种组合模型(面试必考)

1. 同步阻塞(最笨、最慢、普通代码默认)

干等、顺序执行、全程阻塞。

普通脚本、基础代码全部是这种模式。

2. 同步非阻塞

轮询查询,不断判断任务是否完成,极少用。

3. 异步阻塞

提交异步任务,但主线程等待结果。

4. 异步非阻塞(最快、高性能、服务器核心)

不等待、不卡死、最大化利用CPU,协程、高并发框架核心


三、并发与并行(必区分)

并发(Concurrent)

交替执行,同一时间只有一个任务执行,快速切换看起来像同时运行。

单核CPU实现,线程、协程都是并发。

并行(Parallel)

真正同时执行,多核CPU同一时刻运行多个任务。

多进程实现并行。

一句话口诀 : 并发是宏观同时,微观交替 并行是宏观微观都同时


四、多线程详解(Thread)

4.1 什么是线程?

线程是进程内的最小执行单元,一个进程可以开启多个线程。

线程共享进程资源,切换开销小。

4.2 Python线程致命特点(面试重点)

Python 存在 GIL全局解释器锁

同一时刻一个进程内只有一个线程执行

IO密集型:线程非常快(爬虫、文件、网络)

计算密集型:线程失效、速度变慢(被GIL限制)

4.3 多线程简单实战

复制代码
import threading
import time

def task(name):
    print(f"线程 {name} 开始")
    time.sleep(2)
    print(f"线程 {name} 结束")

if __name__ == '__main__':
    t1 = threading.Thread(target=task, args=("A",))
    t2 = threading.Thread(target=task, args=("B",))
    t1.start()
    t2.start()
    t1.join()
    t2.join()

4.4 线程优缺点

✅ 开销小、创建快、适合IO等待任务

❌ GIL锁导致无法利用多核CPU、计算任务拉胯

❌ 多线程存在数据竞争,需要加锁


五、协程详解(Coroutine)------ Python最高效IO方案

5.1 什么是协程?

协程是单线程内的微并发,用户态手动切换,无系统开销。

线程切换由操作系统调度,协程由程序自己调度

5.2 协程核心优势

切换零开销(比线程快几十倍)

无需锁、无竞争、数据安全

超高并发量,上万协程轻松跑

完美避开GIL锁问题

5.3 async/await 实战案例

复制代码
import asyncio

async def task(name):
    print(f"协程 {name} 开始")
    await asyncio.sleep(2)
    print(f"协程 {name} 结束")

async def main():
    await asyncio.gather(
        task("A"),
        task("B"),
        task("C")
    )

if __name__ == '__main__':
    asyncio.run(main())

三个任务总共只耗时2秒,同步需要6秒。


六、多线程 VS 协程(终极对比)

特性 多线程 Thread 协程 Coroutine
调度方式 操作系统调度 用户程序自主调度
切换开销 极小
并发数量 有限(几千上限) 极高(上万、十万)
GIL影响 受GIL限制 不受GIL影响
数据安全 不安全,需加锁 安全,串行执行无竞争
适用场景 普通IO、简单并发 高并发IO、爬虫、后端接口

七、四大场景选型公式(工作直接用)

  1. 普通代码、简单逻辑 → 同步执行

  2. IO密集型(爬虫、请求、文件) → 优先协程、次选多线程

  3. 计算密集型(运算、数据分析) → 多进程

  4. 超高并发服务端 → 异步协程框架(FastAPI、Tornado)


八、全文终极总结(背诵版)

  1. 同步 顺序执行等待结果,异步不等待、后台执行;

  2. 阻塞 原地卡住,非阻塞灵活切换任务;

  3. 并发交替执行,并行同时执行

  4. 多线程操作系统调度,受GIL限制,适合普通IO;

  5. 协程用户态自主调度,开销极低,适合高并发IO;

  6. IO密集用协程/线程,计算密集用多进程。

✨ 至此 Python 并发核心全部通关!面试作业直接满分!

相关推荐
Zach_菠萝侠1 小时前
【DeepSeek Harness 研究】进化方向4:安全加固 思考、设计与实现
开发语言·安全·deepseek
Mike_Zhang1 小时前
使用python统计FreeSWITCH呼叫并发
python·freeswitch
SL-staff2 小时前
技术实践:HR如何用JVS-Logic可视化编排实现考勤数据同步(含节点配置与异常处理)
开发语言·python·低代码·钉钉·可视化编排·jvs-logic·hr技术
SomeB1oody2 小时前
【RustyML入门】6.0. 数学工具
开发语言·后端·机器学习·rust·教程
进制树3 小时前
【飞控开发实战·⑲】ROS2无人机开发环境搭建:Jazzy安装、工作空间与hello_drone节点实战
开发语言·安全·无人机·课程设计
zzzzzz3103 小时前
AI 助手最危险的不是报错,而是“看起来成功”:我给工作流加了四道保险
人工智能·python
牛马也想出海3 小时前
亚马逊爬虫代理IP:IP类型选择与配置指南
开发语言·php
用户8356290780514 小时前
如何使用 Python 将 PowerPoint 转换为 PDF 文档
后端·python
菜冻鱼4 小时前
Python-pytorch-高级技巧
开发语言·人工智能·pytorch·python·深度学习·神经网络·聚类