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

【Linux:线程概念】

目录

概念:

创建线程的函数:​编辑 ​编辑

有多进程为什么还需要有多线程?

线程调度的成本为什么低?

 进程与线程的区别:


概念:

  • 线程是CPU的基本调度单位,在进程内部运行。在内核中,进程是分配系统资源的基本实体。
  • 在Linux系统中没有线程,只有轻量级进程(没有单独设计PCB)。
  • Linux系统没有struct thread结构体,原因是系统统一用PCB表示执行流,就不用单独给线程设计数据结构和调度算法

创建线程的函数:
 

上图可以看见创建了两个线程,但是俩线程的pid却是一样的。 

pid和lwp一样的线程叫做主线程。操作系统调度线程时根据LWP来调度

有多进程为什么还需要有多线程?

  • 线程的创建成本比进程的低,但一个线程运行崩溃会影响其他线程
  • 线程删除仅仅只需要销毁一个tcp即可,但进程的销毁需要销毁pcb,页表,地址空间等
  • 进程切换需要切换页表,地址空间等等,但线程不用,线程的调度成本低

线程调度的成本为什么低?(面试

热数据: 高频访问的数据、极其重要的文件

在CPU中存在一个cache,用于存放热数据,在进程切换时,不仅要切换地址空间,页表,上一个进程cache的热数据也要做清空然后重新加载该进程的热数据。但线程是共享地址空间,CPU 中cache的数据每个线程都有可能用上,就不需要清空cache中的数据重新加载。

 进程与线程的区别:

  • 进程是资源分配的基本单位
  • 线程是调度的基本单位
  • 线程共享数据,但也有自己的数据:
    1.线程ID  2.一组寄存器(硬件的上下文数据)  3.栈 (线程在运行时会形成各种临时变量,这些临时变量会被每个线程保存在自己的栈区) 4.信号屏蔽字  5.errno  6.调度优先级
  • 多个线程之间共享以下资源:
  1. 文件描述符
  2. 每种信号的处理方式
  3. 当前的工作目录
  4. 用户id和组id

进程与线程之间的关系:


http://www.kler.cn/a/326988.html

相关文章:

  • 【Android】Gradle 7.0+ 渠道打包配置
  • 为啥学习数据结构和算法
  • 服务器作业(2)
  • 40.第二阶段x86游戏实战2-初识lua
  • HTML 框架
  • 算法学习027 c++蛇形三角形填充 二维数组常规应用 中小学算法思维学习 比赛算法题解 信奥算法解析
  • 【并发】ThreadLocal 为什么会内存泄露
  • golang小项目1-家庭收支记账系统
  • java计算机毕设课设—超级玛丽游戏(附源码、文章、相关截图、部署视频)
  • OJ在线评测系统 后端基础部分开发 完善CRUD相关接口
  • 【ARM 嵌入式 C 入门及渐进26 -- 内敛函数和宏定义的区别】
  • armbian安装docker
  • MongoDB的查询/超详细/表达式符号
  • SQLMap使用指南
  • Linux服务安装node,npm与yarn
  • 0-1开发自己的obsidian plugin DAY 6
  • 数据挖掘的基本步骤和流程解析:深入洞察与策略实施
  • 重修设计模式-行为型-责任链模式
  • ubuntu24.04 最好的输入法是什么?
  • 【ARM 嵌入式 编译系列 10.6 -- ARM toolchain examples】
  • 【Docker】解决Docker Engine stopped
  • cocos打包后发布web,控制台报错.plist资源下载404
  • Netty 与 WebSocket之间的关系
  • 宠物空气净化器该怎么选?希喂、美的、有哈这三款有推荐的吗?
  • 将 Go 作为脚本语言用及一些好用的包
  • 渗透测试入门学习——编写python脚本实现对网站登录页面的暴力破解