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

9、线程理论1

一、线程

1、线程是什么?

  • 在传统的操作系统设计中,进程是资源分配的基本单位,每个进程都拥有独立的地址空间、页表和至少一个控制线程

  • 单一进程有多个线程的时候。这些线程虽然能独立执行,但是它们共享同一进程的地址空间及其中的所有数据

  • 线程是操作系统能够进行运算调度的最小单位,是进程中的实际运作单元。

  • 进程是资源独立,线程是资源共享。且2者都有调度能力


一个进程的创建实际上伴随着其task_struct结构体、进程地址空间(mm_struct)以及页表的创建,虚拟地址和物理地址就是通过页表建立映射的。

在这里插入图片描述

二、线程的使用

1、功能

1.1、资源共享

  • 多个线程共享一个进程的地址空间,共享了资源。
    • 混合共享(有用户空间和内核空间)
      • 在这里插入图片描述

1.2、轻量级和高效性

  • 比起进程,线程是更加轻量级的执行单元。
  • 由于进程要管理一些文件信息,而线程不管理这些信息,导致线程的创建和销毁比进程快的多。

1.3、性能提升

  • 在涉及大量计算和I/O处理的场景中,多线程编程能够显著提升应用程序的性能。
    • 例如,在Web服务器中,一个线程可以处理客户端的连接请求,而另一个线程则负责从磁盘读取数据并准备响应。这种并行处理方式提高了服务器的吞吐量和响应速度。

2、多线程的解决方案

当多任务进行任务切换的时候,就会导致开销大。比如:web服务器(万维网服务器)。

在这里插入图片描述

3、单线程的解决方案

  • 单线程会导致前一个请求未完成时,后续请求必须等待或者CPU在等待I/O期间处于闲置状态等等问题。

    • 解决方法:

      • 改为IO复用模型epoll:核心思想是使用单个线程通过系统调用同时监控多个I/O事件,当某个I/O操作就绪时才进行处理。

      • 非阻塞的状态机模型:核心思想是所有I/O操作都设置为非阻塞模式,通过状态机管理请求处理流程。

三、经典线程模型

在这里插入图片描述

  • 线程容易发生错误:因为共享资源,所以运行过程中,资源被修改成错的,就导致后面的运行发生问题。
  • 线程是没有执行顺序的。可以使用线程的一些机制来实现顺序:线程同步等等。
  • 线程和进程的内容:

四、线程的同步互斥机制

1、理论

  • 由于同一个进程的多个线程会共享进程的资源,这些被共享的资源称为临界资源

  • 多个线程对公共资源的抢占问题,访问临界资源的代码段称为临界区

  • 多个线程抢占进程资源的现象称为竞态

  • 为了解决竞态,我们引入了同步互斥机制

    • 互斥:确保同一时间只有一个线程能访问共享资源

    • 同步:协调线程间的执行顺序

竞态,我们引入了同步互斥机制

  • 互斥:确保同一时间只有一个线程能访问共享资源

  • 同步:协调线程间的执行顺序

http://www.xdnf.cn/news/1127935.html

相关文章:

  • eVTOL分布式电推进(DEP)适航审定探究
  • redisson tryLock
  • Spring MVC2
  • 尚庭公寓-----day1----@MapperScan爆红问题
  • 三十二、【核心功能改造】数据驱动:重构仪表盘与关键指标可视化
  • 【转】Rust: PhantomData,#may_dangle和Drop Check 真真假假
  • 【字节跳动】数据挖掘面试题0019:带货直播间推荐:现在有一个带货的直播间,怎么把它精准地推送给有需要的用户
  • 【C++】神奇的AVL树
  • WebView JSBridge 无响应问题排查实录 全流程定位桥接调用失效
  • 无人机故障响应模块运行与技术难点
  • Ubuntu24 辅助系统-屏幕键盘的back按键在网页文本框删除不正常的问题解决方法
  • RTL编程中常用的几种语言对比
  • 【C#地图显示教程:实现鼠标绘制图形操作】
  • 厂区车辆导航系统:基于 GPS+AI 动态路径规划的技术实现与实践
  • 春秋云镜 initial
  • 2025开放原子开源生态大会 | openKylin的技术跃迁和全球协作
  • 2025开放原子开源生态大会 | 开源欧拉的AI原生实践与全球协作
  • GaussDB 数据库架构师修炼(三) 集群管理概览
  • 李宏毅《生成式人工智能导论》 | 第11讲-第14讲:大型语言模型的可解释性、能力评估、安全性
  • React源码5 三大核心模块之一:render,renderRoot
  • docker-compose 配置启动2个MongoDB
  • 【Docker基础】Dockerfile构建与运行流程完全指南:从原理到实践优化
  • PostgreSQL 超详细安装与使用教程:从入门到实战
  • Axios 和Express 区别对比
  • 使用LNMP一键安装包安装PHP、Nginx、Redis、Swoole、OPcache
  • Linux系统调优和工具
  • 理解 HTTP POST 请求中的 json 和 data 参数
  • 【目标追踪】MUTR3D: A Multi-camera Tracking Framework via 3D-to-2D Queries
  • 快速了解 HTTPS
  • 【BUG处理】构建APK时遇到错误:‘flutter‘ 命令未被识别。这通常表示您的系统中未安装Flutter SDK或环境变量配置不正确。