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

liunx线程

线程的概念

  1. 程序中的一个执行路线就是线程,线程就是一个进程内部的控制序列
  2. 一个进程至少都有一个执行线程
  3. 线程在进程内部运行,本质是在进程地址空间内运行
  4. liunx系统下,cpu眼里的PCB比传统进程更加轻量化
  5. 透过虚拟地址空间,把进程的大部分资源,把资源合理分配给每个执行流,就形成了线程

线程和进程

  • 进程是资源分配的基本单位
  • 线程是调度的基本单位
  • 线程共享进程地址空间,但是也有自己的一部分数据:线程ID,一组寄存器,栈,errno,信号屏蔽字,有限调度级

线程私有

1.线程的硬件上下文(cpu寄存器的值

线程的硬件上下文是指线程在执行过程中,CPU寄存器的当前状态。这些寄存器包括通用寄存器、程序计数器(IP)、处理器状态寄存器(如EFLAGS在x86架构中)以及栈指针(ESP)等。这些寄存器的值在线程切换时会被保存,以便在线程重新获得CPU时能够恢复其执行状态。

  • 通用寄存器:用于存储线程在执行过程中的临时数据。
  • 程序计数器:存储线程当前正在执行的指令的地址,或者即将执行的下一条指令的地址。
  • 处理器状态寄存器:包含线程的执行状态信息,如条件码、中断标志等。
  • 栈指针:指向线程私有栈的栈顶,用于管理线程的栈空间。

在线程切换时,操作系统会保存当前线程的硬件上下文,并加载下一个要执行的线程的硬件上下文。这样,当线程重新获得CPU时,它可以从上次中断的地方继续执行。

2.线程的独立栈结构

每个线程都有自己独立的栈结构,用于存储线程的局部变量、函数调用信息以及返回地址等。线程的栈空间是线程私有的,这意味着一个线程不能访问另一个线程的栈空间。

  • 栈的作用

    • 存储局部变量:线程在执行函数时,会在栈上分配空间来存储局部变量。
    • 函数调用信息:当线程调用一个函数时,会在栈上保存函数的参数、返回地址以及调用者的上下文信息。
    • 返回地址:当函数执行完毕后,线程会从栈上获取返回地址,并跳转到该地址继续执行。
  • 栈的独立性

    • 线程的栈空间是私有的,这保证了线程之间的数据隔离。
    • 一个线程的栈空间大小是有限的,通常由操作系统在创建线程时指定。
    • 如果线程使用的栈空间超过了指定的限制,就会发生栈溢出错误。

 线程共有

  • 进程地址空间
  • 全局变量
  • 文件描述表
  • 每种信号的处理方式
  • 当前工作目录
  • 用户id和组id

线程就是轻量级进程 

在Linux系统中,线程通常是通过轻量级进程来实现的。线程与轻量级进程在概念上是相似的,都表示进程内部的一个执行单元。linux中没有线程相关的系统调用,只有轻量级进程的系统调用。原生线程库:将轻量级进程系统调用做封装,转成线程相关的接口语义提供给用户

 


http://www.kler.cn/news/360858.html

相关文章:

  • 清朝笔记()
  • ubuntu 开启haproxy UI
  • Vue3脚手架和指令
  • 气膜:冰雪产业的创新解决方案—轻空间
  • 下载MySQL-Windows
  • 【软件安装与配置】 vue
  • 【LeetCode】每日一题 2024_10_19 使二进制数组全部等于 1 的最少操作次数 II(贪心)
  • Linux kernel 堆溢出利用方法
  • Qt中使用线程之QThread
  • LeetCode 3192.使二进制数组全部等于 1 的最少操作次数 II:位运算模拟
  • 如何使用 Browserless 抓取动态网站?
  • 优化多表联表查询的常见方法归纳
  • 力扣(leetcode)每日一题 3191 使二进制数组全部等于 1 的最少操作次数 I |贪心
  • iOS GCD的基本使用
  • 平衡二叉树最全代码
  • pdf怎么合并在一起?pdf合并的简单方法
  • Vue事件处理
  • Neo4J的APOC插件安装与配置
  • pikachu靶场CSRF-get测试报告
  • 八股面试2(自用)