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

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

摘要进程与线程是操作系统面试的必考点也是理解 AI 分布式训练和多线程数据加载的基础。本文从进程内存模型出发系统讲解线程同步机制锁、信号量、条件变量并通过 Python 代码展示多线程爬虫和生产者-消费者模型的实现。一、进程 vs 线程核心区别1.1 内存模型对比进程 B独立的地址空间进程 A代码段数据段堆栈 1栈 2共享内存图 1进程内存模型特性进程线程地址空间独立共享除栈外切换开销大需切换页表小通信方式IPC管道、共享内存、Socket直接读写共享变量崩溃影响不影响其他进程可能导致整个进程崩溃创建开销大小1.2 Python 的 GILPython 的GIL全局解释器锁意味着同一时刻只有一个线程执行 Python 字节码。但这不意味着多线程无用IO 密集型任务网络请求、文件读写多线程仍有收益CPU 密集型任务应使用多进程multiprocessing绕过 GIL。二、线程同步机制2.1 锁、信号量、条件变量 线程同步机制演示 包含锁、信号量、条件变量 importthreadingimporttimefromqueueimportQueuefromtypingimportListclassThreadSyncDemo:线程同步演示staticmethoddefdemo_lock(): 互斥锁演示 保护共享计数器的线程安全 counter0lockthreading.Lock()defincrement():nonlocalcounterfor_inrange(100000):withlock:# 获取锁counter1threads[threading.Thread(targetincrement)for_inrange(5)]fortinthreads:t.start()fortinthreads:t.join()print(f带锁计数器结果:{counter}(期望 500000))staticmethoddefdemo_semaphore(): 信号量演示 限制同时访问资源的线程数量 semaphorethreading.Semaphore(3)# 最多 3 个线程同时执行defworker(worker_id:int):withsemaphore:print(fWorker{worker_id}开始执行)time.sleep(1)print(fWorker{worker_id}执行完毕)threads[threading.Thread(targetworker,args(i,))foriinrange(6)]fortinthreads:t.start()fortinthreads:t.join()staticmethoddefproducer_consumer(): 生产者-消费者模型 使用条件变量实现线程间协调 queueQueue(maxsize10)defproducer():foriinrange(20):itemfitem_{i}queue.put(item)print(f生产:{item})time.sleep(0.1)defconsumer():for_inrange(20):itemqueue.get()print(f消费:{item})queue.task_done()time.sleep(0.2)pthreading.Thread(targetproducer)cthreading.Thread(targetconsumer)p.start()c.start()p.join()c.join()deftest_thread_sync():print(*60)print(线程同步测试)print(*60)demoThreadSyncDemo()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:int100,num_workers:int4): 并行数据加载 使用多进程绕过 GIL加速 CPU 密集型预处理 starttime.time()withPool(num_workers)aspool:resultspool.map(preprocess_data,range(num_items))elapsedtime.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死锁的四个必要条件答互斥、占有且等待、不可抢占、循环等待。破坏任一条件即可避免死锁。Q3Python 的多线程为什么不适合 CPU 密集型任务答GIL 限制同一时刻只有一个线程执行 Python 字节码多线程无法并行利用多核。五、总结核心要点进程是资源分配单位线程是调度单位线程同步是并发编程的核心难点锁粒度要细持有时间要短Python 中 IO 密集用线程CPU 密集用进程死锁预防优于检测设计时避免循环等待。本文基于 Coding Interview University 项目整理专注进程与线程专题。

相关文章:

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

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

大数据+大模型=乘法效应?6个场景告诉你,大模型如何让你的数据平台“活”起来!

本文探讨了大数据与大模型的关系,提出大模型是大数据平台的“发动机”。文章重点介绍了六个必须使用大模型才能解放双手的场景,包括数据血缘解析、Text2SQL、数据质量智能巡检、调度任务智能运维、元数据管理和报告自动生成。这些场景展示了大模型如何通…...

计算机网络基础:TCP/IP 与 HTTP 核心知识

摘要:计算机网络是后台开发和 AI 基础设施面试的重要考点。本文从 OSI 七层模型出发,重点讲解 TCP 三次握手/四次挥手、HTTP/HTTPS 协议、以及 WebSocket 和 RESTful API 设计,并结合 Python 代码展示 Socket 编程和简单的 HTTP 服务器实现。…...

缓存设计:从 LRU 到 Redis 实战

摘要:缓存是提升系统性能的第一道防线,也是面试中系统设计环节的核心话题。本文系统讲解缓存的四大置换策略、LRU 和 LFU 的实现原理,并结合 Python 代码展示完整的缓存系统。AI 开发者还将学到 KV Cache 在 LLM 推理中的关键作用。一、为什么…...

14000华夏之光永存:开源:华为五大全栈硬核技术揭榜课题完整梳理(预刊抽取篇)

开源:华为五大全栈硬核技术揭榜课题完整梳理(预刊抽取篇) 摘要 本文完整收录黄大年茶思屋珠峰会战第八期5项前沿技术揭榜难题,原样保留技术背景、技术挑战、现有方案、现存缺陷与量化技术诉求,不做内容删减与篡改。本文…...

深度强化学习与控制2026 课程总结Week2

深度Q网络——DQN算法流程: (1) 初始化网络参数 (2) 初始化网络参数 (3) 初始化经验回放池R (4) 进入循环迭代训练:for 序列 do获取初始状态for 时间步 do 根据以贪婪策略选择动作,获得,存入经验回放池R若R中数据充足,从R中采样…...

2026年腾讯云OpenClaw/Hermes Agent配置Token Plan怎么安装看这

2026年腾讯云OpenClaw/Hermes Agent配置Token Plan怎么安装看这。OpenClaw是开源的个人AI助手,Hermes Agent则是一个能自我进化的AI智能体框架。阿里云提供计算巢、轻量服务器及无影云电脑三种部署OpenClaw 与 Hermes Agent的方案、百炼Token Plan兼容主流 AI 工具&…...

2026年阿里云OpenClaw/Hermes Agent配置Token Plan怎么安装看这

2026年阿里云OpenClaw/Hermes Agent配置Token Plan怎么安装看这。OpenClaw是开源的个人AI助手,Hermes Agent则是一个能自我进化的AI智能体框架。阿里云提供计算巢、轻量服务器及无影云电脑三种部署OpenClaw 与 Hermes Agent的方案、百炼Token Plan兼容主流 AI 工具&…...

TVA驱动智能家居的视觉范式革命(11)

重磅预告:本专栏将独家连载系列丛书《智能体视觉技术与应用》部分精华内容,该书是世界首套系统阐述“因式智能体”视觉理论与实践的专著,特邀美国 TypeOne 公司首席科学家、斯坦福大学博士 Bohan 担任技术顾问。Bohan先生师从美国三院院士、“…...

项目介绍 基于Python的大学生竞赛组队系统设计与实现(含模型描述及部分示例代码)专栏近期有大量优惠 还请多多点一下关注 加油 谢谢 你的鼓励是我前行的动力 谢谢支持 加油 谢谢

基于Python的大学生竞赛组队系统设计与实现的详细项目实例 请注意此篇内容只是一个项目介绍 更多详细内容可直接联系博主本人 或者访问对应标题的完整博客或者文档下载页面(含完整的程序,GUI设计和代码详解) 大学生竞赛已成为高校人才培养…...

CANN-ops-nn-昇腾NPU神经网络算子的积木盒子

你去超市买过那种混合装坚果吗?一袋里面核桃、腰果、巴旦木都有,打开直接吃,不用自己搭配。ops-nn 在昇腾CANN生态里就是这个角色——把神经网络最常用的算子打包好了,打开就能用。昇腾NPU跑大模型、跑视觉模型,底层都…...

proj-agones:知识点:helm

helm install之后的log be like:(base) savilahaobogon ~ % helm install prometheus prometheus-community/kube-prometheus-stack -n monitoring --create-namespace NAME: prometheus LAST DEPLOYED: Wed May 20 14:54:39 2026 NAMESPACE: monitoring STATUS: de…...

HTML 零基础入门:从概念到常用标签详解,前端入门超详细版

一、HTML介绍HTML 全称超文本标记语言(HyperText Markup Language),是搭建网页的基础骨架语言,也是前端开发最入门、最核心的语言。它不属于编程语言,没有逻辑运算、没有变量,只是一套标记标签,…...

软考中级嵌入式——第九章 数据结构与算法

1.数据结构与算法概念1.1数据结构数据结构概述:数据结构是计算机存储、组织数据的方式。简单来说,就是如何把现实中的数据(如数字、文字、图片)合理地整理好,放进计算机里,并定义好对这些数据可以做什么操作…...

项目介绍 基于java+vue的跨境电商销售预测与可视化平台设计与实现(含模型描述及部分示例代码)专栏近期有大量优惠 还请多多点一下关注 加油 谢谢 你的鼓励是我前行的动力 谢谢支持 加油 谢谢

基于javavue的跨境电商销售预测与可视化平台设计与实现的详细项目实例 请注意此篇内容只是一个项目介绍 更多详细内容可直接联系博主本人 或者访问对应标题的完整博客或者文档下载页面(含完整的程序,GUI设计和代码详解) 跨境电商销售预测…...

紧急预警:2024年底起,欧盟CSRD与国内《电力人工智能应用安全规范》将强制要求Agent可解释性审计——3类高危黑箱行为自查清单

更多请点击: https://codechina.net 第一章:AI Agent能源行业应用 AI Agent正以前所未有的深度融入能源行业的核心环节,从智能电网调度、风/光功率预测,到设备故障诊断与碳排优化决策,其自主感知、推理与执行能力显著…...

单一职责原则 登录功能重构笔记

核心定义单一职责原则:一个类只干一件事,只有一个修改的理由,避免功能杂糅、代码耦合。原有问题原始 Login 登录类,把界面展示、数据库连接、数据查询、登录校验、程序启动全部堆在一个类里,职责混乱,任何小…...

数据类型与变量-Part3-输入输出格式化艺术

C语言输入输出格式化艺术系列导航 ✅ Part 1: C语言数据类型与变量(基础篇)✅ Part 2: C语言内存探秘(进阶篇)📍 Part 3: C语言输入输出格式化艺术 ← 你在这里上一篇我们深入了内存底层,这篇我们来聊聊你和…...

【Web安全】-企业资产信息收集(1):信息收集介绍,域名信息收集,主域名查询,ICP备案号查询,备案实体查询,工业和信息化部政务服务平台查询,怎样收集

🦆 个人主页:深邃- ❄️专栏传送门:《C语言》《数据结构与算法》《Web安全》 🌟Gitee仓库:《C语言》《数据结构与算法》 特此声明:本次信息收集均在日期授权时间内收集,并且都将所有人员信息打…...

CNKI-download:3步实现知网文献批量下载与管理的Python自动化工具

CNKI-download:3步实现知网文献批量下载与管理的Python自动化工具 【免费下载链接】CNKI-download :frog: 知网(CNKI)文献下载及文献速览爬虫 (Web Scraper for Extracting Data) 项目地址: https://gitcode.com/gh_mirrors/cn/CNKI-download 你是否曾为手动…...

从零入门 OpenAI Codex|登录、权限、终端、记忆配置全实操

我先来简单介绍一下Codex。 Codex是 OpenAI 推出的 AI 编程模型与工具系列。Codex 最初于 2021 年作为 OpenAI API 的一部分发布,基于 GPT 架构专门针对代码数据进行了训练。2024 至 2025 年间,OpenAI 推出了独立的 Codex CLI命令行工具,使其…...

Kubernetes DaemonSet深度解析:管理集群守护进程的最佳实践

Kubernetes DaemonSet深度解析:管理集群守护进程的最佳实践 一、DaemonSet概述 DaemonSet 是Kubernetes中用于在集群的每个节点上运行一个Pod副本的控制器。它确保所有节点(或满足特定条件的节点)都运行该Pod的一个实例。 1.1 DaemonSet应…...

昇腾CANN runtime Stream 调度引擎:从命令队列到 AI Core 的执行链路

用户看到的是一行 torch.nn.functional.softmax(x)&#xff0c;背后 runtime 要做&#xff1a;分配 Stream、入队命令、调度到 AI Core、等待完成、同步结果。如果这一行的延迟是 10μs&#xff0c;runtime 的调度开销必须 < 0.5μs——否则就是 5% 的性能损失。 runtime 的…...

Kubernetes StatefulSet深度解析:管理有状态应用的最佳实践

Kubernetes StatefulSet深度解析&#xff1a;管理有状态应用的最佳实践 一、StatefulSet概述 StatefulSet 是Kubernetes中用于管理有状态应用的控制器。它为Pod提供稳定的网络标识和持久化存储&#xff0c;确保Pod的有序部署、扩展和更新。 1.1 StatefulSet vs Deployment …...

JDK常用类与工具(速览版)

JDK常用类与工具&#xff08;速览版&#xff09;JDK&#xff08;Java Development Kit&#xff09;提供了丰富的标准库和实用工具&#xff0c;它们构成了Java开发者日常工作的基石。掌握这些核心类、集合框架、并发工具、IO/NIO库、日期时间API、正则表达式、异常处理机制、日志…...

GPS测速仪SpeedView 3.2.0汉化版 精准速度 实时测速工具

一款实时测速应用程序&#xff0c;英文名为“SpeedView”&#xff0c;安装到手机上就能够在开车的时候查看仪表盘车辆的速度是否准确 实时测速&#xff1a;通过GPS精准定位&#xff0c;实时显示当前速度、平均速度和最高速度&#xff0c;支持多种单位切换&#xff08;km/h、mp…...

阿里巴巴运营/2026年阿里巴巴1688店铺效果越来越差的3个核心原因(附解决方案)

阿里巴巴运营/2026年阿里巴巴1688店铺效果越来越差的3个核心原因&#xff08;附解决方案&#xff09;最近很多工厂老板跟我说&#xff0c;小峰老师&#xff0c;我这1688店铺怎么越做越没效果了&#xff1f;明明以前还能来几个询盘&#xff0c;现在越来越少&#xff0c;是不是16…...

CANN-ATB量化推理-昇腾NPU上W8A8量化为什么比W4A16更实用

Llama2-70B 权重 140GB&#xff0c;8 卡 TP 刚好放得下但没什么余量给 KV Cache。W8A8 量化把权重从 fp16 压到 int8&#xff0c;权重体积减半&#xff0c;4 卡就能跑 70B。W4A16 理论上压得更狠&#xff08;4 倍压缩&#xff09;&#xff0c;但精度损失在实际业务里往往不可接…...

CANN-HCCL-昇腾NPU分布式训练的通信库怎么选

8 卡 Atlas 800I A2 内部走 HCCS&#xff08;带宽 200GB/s&#xff09;&#xff0c;跨机走 RoCE&#xff08;带宽 100GB/s&#xff09;。HCCL 是昇腾NPU的通信库&#xff0c;对标 NVIDIA 的 NCCL。Tensor Parallel 和 Pipeline Parallel 的 All-Reduce、All-to-All 都靠它。 HC…...

nvm-setup安装步骤详解

nvm-setup是 Node Version Manager&#xff08;Node.js 版本管理器&#xff09;​ 的安装包。装了它&#xff0c;你就能在一台电脑上随时切换多个 Node.js 版本&#xff0c;做前端开发、跑不同项目的必备工具。一、准备工作安装包下载&#xff1a;https://wwbkk.lanzoub.com/iU…...