当前位置: 首页 > news >正文

进程与线程:并发编程基础

摘要:进程与线程是操作系统面试的必考点,也是理解 AI 分布式训练和多线程数据加载的基础。本文从进程内存模型出发,系统讲解线程同步机制(锁、信号量、条件变量),并通过 Python 代码展示多线程爬虫和生产者-消费者模型的实现。


一、进程 vs 线程:核心区别

1.1 内存模型对比

进程 B

独立的地址空间

进程 A

代码段

数据段

栈 1

栈 2

共享内存

图 1:进程内存模型

特性进程线程
地址空间独立共享(除栈外)
切换开销大(需切换页表)
通信方式IPC(管道、共享内存、Socket)直接读写共享变量
崩溃影响不影响其他进程可能导致整个进程崩溃
创建开销

1.2 Python 的 GIL

Python 的GIL(全局解释器锁)意味着同一时刻只有一个线程执行 Python 字节码。但这不意味着多线程无用:

  • IO 密集型任务:网络请求、文件读写,多线程仍有收益;
  • CPU 密集型任务:应使用多进程(multiprocessing)绕过 GIL。

二、线程同步机制

2.1 锁、信号量、条件变量

""" 线程同步机制演示 包含锁、信号量、条件变量 """importthreadingimporttimefromqueueimportQueuefromtypingimportListclassThreadSyncDemo:"""线程同步演示"""@staticmethoddefdemo_lock():""" 互斥锁演示 保护共享计数器的线程安全 """counter=0lock=threading.Lock()defincrement():nonlocalcounterfor_inrange(100000):withlock:# 获取锁counter+=1threads=[threading.Thread(target=increment)for_inrange(5)]fortinthreads:t.start()fortinthreads:t.join()print(f"带锁计数器结果:{counter}(期望 500000)")@staticmethoddefdemo_semaphore():""" 信号量演示 限制同时访问资源的线程数量 """semaphore=threading.Semaphore(3)# 最多 3 个线程同时执行defworker(worker_id:int):withsemaphore:print(f"Worker{worker_id}开始执行")time.sleep(1)print(f"Worker{worker_id}执行完毕")threads=[threading.Thread(target=worker,args=(i,))foriinrange(6)]fortinthreads:t.start()fortinthreads:t.join()@staticmethoddefproducer_consumer():""" 生产者-消费者模型 使用条件变量实现线程间协调 """queue=Queue(maxsize=10)defproducer():foriinrange(20):item=f"item_{i}"queue.put(item)print(f"生产:{item}")time.sleep(0.1)defconsumer():for_inrange(20):item=queue.get()print(f"消费:{item}")queue.task_done()time.sleep(0.2)p=threading.Thread(target=producer)c=threading.Thread(target=consumer)p.start()c.start()p.join()c.join()deftest_thread_sync():print("="*60)print("线程同步测试")print("="*60)demo=ThreadSyncDemo()print("\n【测试 1】互斥锁")demo.demo_lock()print("\n【测试 2】信号量")demo.demo_semaphore()print("\n【测试 3】生产者-消费者")demo.producer_consumer()print("\n"+"="*60)if__name__=="__main__":test_thread_sync()

代码 1:线程同步机制


三、AI 场景:多进程数据加载

""" PyTorch DataLoader 风格的多进程数据加载 """frommultiprocessingimportPool,QueueasMPQueueimporttimedefpreprocess_data(item_id:int)->dict:"""模拟数据预处理"""time.sleep(0.1)# 模拟耗时操作return{"id":item_id,"features":[item_id*iforiinrange(10)]}defparallel_data_loading(num_items:int=100,num_workers:int=4):""" 并行数据加载 使用多进程绕过 GIL,加速 CPU 密集型预处理 """start=time.time()withPool(num_workers)aspool:results=pool.map(preprocess_data,range(num_items))elapsed=time.time()-startprint(f"加载{num_items}条数据,{num_workers}个 Worker")print(f"耗时:{elapsed:.2f}秒")print(f"吞吐量:{num_items/elapsed:.1f}items/s")returnresultsdeftest_data_loading():print("\n并行数据加载测试:")parallel_data_loading(100,4)if__name__=="__main__":test_data_loading()

代码 2:多进程数据加载


四、面试高频问题

Q1:进程间通信有哪些方式?

:管道、消息队列、共享内存、信号量、Socket、信号。

Q2:死锁的四个必要条件?

:互斥、占有且等待、不可抢占、循环等待。破坏任一条件即可避免死锁。

Q3:Python 的多线程为什么不适合 CPU 密集型任务?

:GIL 限制同一时刻只有一个线程执行 Python 字节码,多线程无法并行利用多核。


五、总结

核心要点

  1. 进程是资源分配单位,线程是调度单位
  2. 线程同步是并发编程的核心难点:锁粒度要细,持有时间要短;
  3. Python 中 IO 密集用线程,CPU 密集用进程
  4. 死锁预防优于检测:设计时避免循环等待。

本文基于 Coding Interview University 项目整理,专注进程与线程专题。

http://www.jsqmd.com/news/874014/

相关文章:

  • RMAN 增量备份(Incremental Backup)
  • 2026年5月天津国际学校推荐:五所专业评测国际部课程价格与注意事项 - 品牌推荐
  • 广州到清远跨市搬家怎么选公司?这三点比价格更重要 - 生活服务
  • 2026年5月株洲二手房中介推荐:TOP5排名评测专业价格避坑安全交易 - 品牌推荐
  • 10_函数递归_从阶乘到递归调用栈
  • 聚焦2026年当前市场,宁波华维机械有限公司的PVC专用机解决方案 - 2026年企业推荐榜
  • CTF解题记录5(web)
  • 通过curl命令调试Taotoken大模型API,快速排查接入问题
  • 为什么你的AI Agent总在跨境清关环节“失语”?揭秘NLP+规则引擎混合推理的5个关键断点
  • 蜀冀昌生护栏网技术分享:护栏网定制、蜀冀昌生护栏网、蜀冀昌生钢筋网片、钢筋网片价格、钢筋网片公司、钢筋网片厂家哪家好选择指南 - 优质品牌商家
  • 2026年佛山墙面刷新口碑指数报告:基于消保委580条数据与行业协会权威认证 - 优家闲谈
  • 11_指针入门_地址指针变量解引用与指针运算
  • 施工现场安全事故预警准确率达94.6%?——解密某央企AI Agent边缘计算部署架构与3个月落地实录
  • 2025-2026年久韵红家具电话查询:选购前需核实资质并明确定制细节 - 品牌推荐
  • 甘肃太阳能草坪灯技术解析与靠谱厂家服务指南:甘肃草坪灯/甘肃路灯/甘肃道路灯/兰州中高杆灯/兰州交通信号灯/兰州地埋灯/选择指南 - 优质品牌商家
  • 从手工报表到实时BI:一个零售数据平台的踩坑与重构实战
  • 2026年5月国内十大游戏鼠标品牌推荐:专业评测排名电竞抓握防滑脱价格 - 品牌推荐
  • MySQL 进阶教程 第一章第二章
  • 在Taotoken模型广场中根据任务需求选择合适的ChatGPT版本
  • 2025-2026年时余家具电话查询:选购前需核实产品材质与风格适配 - 品牌推荐
  • AI 辅助用户画像与场景构建:从访谈文本到可验证的研究假设
  • 广州厂房搬迁避坑指南2026新规下如何选对靠谱搬家公司? - 生活服务
  • Go语言并发模式:Worker Pool
  • 为什么头部科技公司已停用公有版Midjourney?企业版专属水印、审计日志与API策略深度解密
  • AI 快速生成标准化问卷分析报告:从 SUS 到 UMUX-LITE,如何把“分数”写成“结论”
  • 【紧急预警】Apple Podcasts与Spotify已启动AI语音内容水印识别系统——3步完成合规声纹嵌入(含Python脚本+FFmpeg参数集)
  • 2026年景区智能监控系统实测评测:远程监控器、远程监控系统、远程监控设备、安防监控系统设备、数字高清监控、无线监控系统选择指南 - 优质品牌商家
  • Go语言上下文管理:Context模式
  • 【2026最新全网最细】MySQL卸载、下载、安装、配置、使用全流程图文解析、和细节讲解(保姆级教学)
  • 2026年Q2:高效节能电机厂家推荐、Y系列三相异步电机生产厂家、Y系列电机生产厂家价格、Y系列电机生产厂家推荐选择指南 - 优质品牌商家