尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
Linux:线程
一、为什么操作系统需要线程线程的由来1. 进程的致命缺点早期操作系统以进程为最小调度单位但进程有非常大的局限性进程资源太重每个进程独立内存、独立PC、独立地址空间虚拟内存页表创建、销毁、切换开销极大。进程切换慢进程切换需要刷新页表、刷新缓存、保存大量寄存器耗时高。进程内部无法并行一个进程同一时刻只能干一件事阻塞时整个进程卡死无法利用多核。进程间通信比较麻烦需要通过管道、虚拟内存、消息队列等才能实现进程间通信。2. 线程的诞生目的为了解决这些进程太重、切换慢、并发能力差的问题操作系统引入了线程轻量级进程。核心思想进程负责分配资源线程负责干活。线程共享进程大部分资源资源创建、销毁、切换成本极低一个进程可以包含多个线程真正实现一个程序同时做多件事极大提升 CPU 利用率、程序并发能力打个比喻如果将进程比作工厂中的一个车间那么线程就是每个车间中进行的工人二、线程的基本概念1. 什么是线程线程是操作系统能够进行运算调度的最小单位是进程内的一条执行路径。线程被称为是轻量级进程在计算机看来进程就是一个PCB结构体同样的线程就是一个和线程类似的TCB结构体。一个进程至少有一个主线程多个线程共享进程的堆内存、全局变量、文件描述符、信号、地址空间线程私有线程栈、程序计数器、局部变量、寄存器状态2. 线程的特点轻量级开销小共享进程资源通信简单切换速度远快于进程线程之间相互影响一个线程崩了可能影响整个进程三、线程与进程的核心区别重点这是面试最高频考点我帮你整理成博客通俗版1. 资源层面进程资源分配的最小单位独立地址空间互不干扰线程CPU调度执行的最小单位共享进程资源2. 开销层面进程创建销毁慢、切换极慢线程创建销毁快、切换极快3. 通信方式进程通信复杂管道、消息队列、共享内存、socket线程通信简单直接读写全局变量即可4. 独立性进程完全独立一个进程崩溃不影响其他进程线程不独立一个线程异常崩溃整个进程就会退出四、并发与并行彻底讲清楚区别1. 并发单核 CPU 快速交替执行多个线程宏观看起来同时运行微观上是在CPU中交替执行的。作用提高IO 密集型任务效率等待IO时切换线程2. 并行多核 CPU 同一时刻真正同时执行多个线程真正意义上的同时运行。作用提高CPU 密集型任务效率多核CPU3. 总结并发是交替做并行是同时做。五、线程安全问题为什么会出现线程不安全1. 线程不安全根本原因多线程共享资源全局变量、静态变量、堆对象CPU 时间片随机抢占、线程交替执行读写操作不具备原子性2. 经典案例count 线程不安全count 实际分为三步读取 count 值CPU 计算 1写回内存多线程交替执行会导致覆盖写、数据丢失最终结果偏小。3. 线程安全的定义多线程并发访问共享数据时最终结果和单线程顺序执行结果一致没有数据错乱、数据丢失。六、线程的同步与互斥核心重难点1. 互斥1互斥是什么同一时刻只允许一个线程访问共享资源。解决竞争资源冲突、数据覆盖问题。典型实现互斥锁 mutex、synchronized2如何实现互斥使用互斥锁或者信号量将信号量的初始值设置为1即可实现互斥的效果2. 同步1同步是什么线程按照预定顺序、有序执行。解决线程执行顺序混乱、生产者消费者顺序问题。2如何实现同步使用条件变量搭配互斥锁、信号量互斥竞争关系抢资源互斥排斥同步协作关系互相等待、有序执行七、死锁的概念、产生条件1. 什么是死锁多个线程互相持有对方需要的锁又互相等待对方释放锁无限阻塞、程序卡死无法继续执行。2. 死锁产生的四大必要条件必考互斥条件资源同一时刻只能一个线程持有持有并等待线程持有旧锁又请求新锁不可剥夺锁不能被强制抢走只能主动释放环路等待线程之间形成环形锁等待链四个条件同时满足才会死锁破坏任意一个即可避免死锁。八、死锁的预防、避免、解决方式1. 死锁预防从代码层面杜绝条件破坏请求与保持一次性申请所有需要的锁破坏环路等待所有线程统一锁的获取顺序破坏不可剥夺加锁倒计时超时放弃锁请求2. 死锁避免运行时动态规避经典算法银行家算法核心每次分配资源前预判如果预判的结果可以顺利执行并不会发生死锁就会进行资源分配如果会发生死锁则重新寻找新的资源分配的方案3. 工程中常用解决方案统一锁的获取顺序最常用、最简单加锁超时机制将所有需要的锁一次性申请完九、总结线程的出现解决了进程过重、并发能力弱的问题是现代高并发服务的基石。但多线程带来三大核心问题线程安全、同步互斥、死锁。
RELATED

相关推荐

JavaScript 未排序数组中第 k 个最小/最大元素 (预期线性时间)

JavaScript 未排序数组中第 k 个最小/最大元素 (预期线性时间)

目录 例如 流程图 示例代码 参考资料 如果您喜欢此文章,请收藏、点赞、评论,谢谢,祝您快乐每一天。 未排序数组中第 k 个最小/最大元素 (预期线性时间)(Kth Smallest/Largest Element in Unsorted Array | Set 2 …

📅 2026/10/24 5:20:57
TVA智能体技术体系概述(58):TVA-World生成式具身智能全景解析

TVA智能体技术体系概述(58):TVA-World生成式具身智能全景解析

前沿技术探索:TVA智能体(简称TVA) TVA智能体(亦称“AI智能体视觉”)是依托Transformer架构与“因式智能体”理论构建的新型工业视觉系统,也是当前最具代表性的具身视觉技术之一。它有机融合深度强化学习(DRL)、卷积神经网络(CNN)与因式分解算法(FRA),构成了具身智…

📅 2026/10/24 5:20:57
TVA智能体技术体系概述(54):TVA生成式智能物理建模的三大技术瓶颈研究

TVA智能体技术体系概述(54):TVA生成式智能物理建模的三大技术瓶颈研究

前沿技术探索:TVA智能体(简称TVA) TVA智能体(亦称“AI智能体视觉”)是依托Transformer架构与“因式智能体”理论构建的新型工业视觉系统,也是当前最具代表性的具身视觉技术之一。它有机融合深度强化学习&a…

📅 2026/10/24 5:20:57
MORE NEWS

更多资讯

📰

大模型如何决定“读不读”?从注意力机制到长上下文应用实践

模型在长上下文里是不是真的把每个字都“读”进去了?这个问题我琢磨了很久。正好NIPS 2025上有篇标题很直接的研究,题目叫“Language Models (Mostly) Know When to Stop Reading”,大意是“大语言模型大多数时候知道自己该停在哪”。这篇博文…

📰

DirectShow 虚拟摄像头:.ax 源滤镜与 FillBuffer 实现

简介:DirectShow 实现的 VCAM 虚拟摄像头工程项目,面向 Windows 多媒体开发者,适合需要在不依赖物理摄像头的情况下提供连续视频流的测试、演示与软件集成场景,也可作为学习 DirectShow 滤镜体系的实战样本。压缩包共 154 个文件&…

📰

Vue事件冒泡导致文件上传弹窗两次?用@click.stop彻底解决

1. 事件冒泡为什么会让文件选择框弹两次先说个我实际踩过的场景。某后台管理项目里,我需要做一个卡片式的上传入口:整张卡片可以点击进入详情页,卡片右上角有一个上传按钮。结果上线后测试同事反馈,点一次上传按钮会弹两次文件选择…

📰

基于Arduino与ESP8266的温湿度及PM2.5环境监测系统设计

拿到这个标题,第一反应就是典型的“毕业设计/课程设计热门款”加“个人DIY环境监测入门标配”。但说真的,把它做好做稳并不简单,很多照着网上教程接线的人最后都卡在数据飘、连不上网、读数对不齐这几个地方。我这篇不打算只给一份能用就行的…

📰

Qt节点式视觉工具链:QGraphicsScene流程编辑器源码解析

做视觉项目这些年,我越来越觉得“工具链搭建”和“流程编排”是个绕不开的坎。尤其是做工业检测类的上位机软件,常常需要把相机采集、图像预处理、特征提取、缺陷判定、结果输出这些步骤串起来。最朴素的实现是写死一段流程函数,今天要加一个…

📰

龙软地质建模开源复现:从钻孔数据到三维地层的全流程闭环

简介:龙软地质软件是一款面向地质勘查、矿山设计与采矿工程技术人员的专业工具,聚焦三维地质建模、矿体可视化分析与开采方案辅助设计,有效解决地层结构解析、钻孔数据整合、地质图件绘制及稳定性模拟等核心问题。资源包共121个文件&#xff…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬