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

线程概念linux

何为线程:

线程是程序中负责执行的单位,它可以被看作是进程的一部分,是进程的子任务。线程与进程的区别在于,进程是一个资源单位,而线程是进程的一部分,它只有栈这个独立的资源,其他资源如代码段、数据段、堆、环境变量表等都是共享的。一个进程至少有一个线程(主线程),可以有多个线程。线程可以通过同步方式(如pthread_join函数等待)或异步方式(不与主线程有关,无法被等待)来执行

线程其实是进程的一个执行流

我们过去的进程认为是内核数据结构+进程代码与数据 

将这些的组合叫做进程,但是线程其实也是这样的组合结构

但是在linux中,我们认为线程其实也就是多个PCB共享除PCB以外的进程数据结构+代码数据。 

整个红框中的数据结构的集合我们叫做进程。如果进程只有一个PCB我们称之为单执行流进程

拥有多个PCB数据结构的进程,我们称之为多执行流进程。

 在linux操作系统中,我们并没有为线程独立开新的数据结构,而是复用了进程PCB数据块模拟线程。做到了一种复用逻辑,所以其实我们linux操作系统避免有线程的概念。

所以我们将进程线程统称为轻量级进程。

进程内的线程的pid相同,应为处于同一进程内,但是他们的tid不同(线程id

先写个代码

 运行函数

所有线程的pid都是相同的说明了,他们确实处于同一进程内

ps -L选项查看线程

PID:进程id

LWP:轻量级进程id号

多个线程PID相同,LWP号不同,确实创建了多个线程,而LWP与PID相同的线程,我们称之为主线程

线程与线程之间

在同一个进程中的线程,也是有着独立与共享的分别

线程独立拥有:

线程独立最重要的就是一组寄存器与栈。

一组寄存器是对上下文数据的保存,在轻量级进程调度的时候保证不会出错

栈是函数栈帧,保存该线程的工作环境与上级函数。

结论:

线程:是CPU调度的基本单位。

进程:是承担分配系统资源的基本实体单位

http://www.lryc.cn/news/110259.html

相关文章:

  • 【Yolov5+Deepsort】训练自己的数据集(1)| 目标检测追踪 | 轨迹绘制
  • express学习笔记4 - 热更新以及express-boom
  • Ajax_02学习笔记(源码 + 图书管理业务 + 以及 个人信息修改功能)
  • Python-数据类型转换
  • DASCTF 2023 0X401七月暑期挑战赛 Web方向 EzFlask ez_cms MyPicDisk 详细题解wp
  • 数据结构-链表
  • 大数据Flink(五十五):Flink架构体系
  • 使用矢量数据库打造全新的搜索引擎
  • 算法提高-树状数组
  • Django ORM详解:最全面的数据库处理指南
  • Istio 安全 授权管理AuthorizationPolicy
  • 04 Ubuntu中的中文输入法的安装
  • faac内存开销较大,为方便嵌入式设备使用进行优化(valgrind使用)
  • 分数线划定(c++题解)
  • React 在 html 中 CDN 引入(包含 antd、axios ....)
  • 数据结构----异或
  • PHP Smarty模板的语法规则是怎样的?
  • Socks IP轮换:为什么是数据挖掘和Web爬取的最佳选择?
  • 优化|当机器学习上运筹学:PyEPO与端对端预测后优化
  • Cocos Creator的 Cannot read property ‘applyForce‘ of undefined报错
  • 纯css实现九宫格图片
  • 【MySQL】数据库的增删查改+备份与恢复
  • Docker 部署 redis 举例
  • 通过HandlerMethodArgumentResolver实现统一添加接口入参参数
  • JAVA-spring boot 2.4.X报错Unable to find GatewayFilterFactory with name Hystrix
  • 运输层---UDP协议
  • 【LeetCode】剑指 Offer Ⅱ 第3章:字符串(7道题) -- Java Version
  • 【python】绘图代码模板
  • RTT学习笔记12-KConfig 语法学习
  • 基于Mediapipe的姿势识别并同步到Unity人体模型中