Linux系统编程之线程(一)

线程的概念

什么是线程

  • LWP:light weight process 轻量级的进程,本质仍是进程(在Linux下)
  • 进程:独立地址空间(每创建一个进程,拥有0-4GB的独立进程地址空间),拥有PCB(进程描述符)
  • 线程,也有PCB,但没有独立的地址空间(共享)
  • 区别:在于是否共享地址空间 独居(进程) 合租(线程)
  • Linux下:
    线程:最小的执行单位,即系统调度的最小单位
    进程:最小资源分配单位,可看成只有一个线程的进程

Linux内核线程实现原理

  1. 线程,也有PCB,创建线程使用的底层函数和进程一样,都是clone
    创建进程使用fork函数,创建线程使用pthread_create函数,但两者都会调用底层的clone函数
  2. 从内核里看进程和线程是一样的,都有各自不同的PCB,但是PCB中指向内存资源的三级页表是相同的
    在这里插入图片描述
  3. 进程可以蜕变成线程
  4. 线程可看作寄存器和栈的集合
    【注意】 虽然线程共享内存空间,但是各个线程执行的函数不同,所以它们的栈的地址空间不同
    在这里插入图片描述
  5. 在Linux下,线程是最小的执行单位;进程是最小的资源分配单位
    查看线程号:ps -Lf pid 查看指定线程的lwp号
    在这里插入图片描述

线程共享资源

  1. 文件描述符表
  2. 每种信号的处理方式
  3. 当前工作目录
  4. 用户ID和组ID
  5. 内存地址空间(.text/.data/.bss/heap(堆)/共享库)

线程非共享资源

  1. 线程ID
  2. 处理器现场(寄存器的值)和栈指针(内核栈)
  3. 独立的栈空间(用户空间栈)
  4. errno变量:全局变量,放在data段上
  5. 信号屏蔽字
  6. 调度优先级

线程优缺点

  1. 优点
    • 提高程序并发性
    • 开销小(对比开相同的进程和线程而言)
    • 数据通信、共享数据方便(内存地址空间共享)
  2. 缺点
    • 线程里面的函数大多都是库函数,而进程中的函数大多是系统调用,不稳定
    • 调试,编写困难,gdb不支持(打印日志)
    • 对信号支持不好
  3. 优点相对突出,缺点均不是硬伤。Linux下由于实现方法导致进程、线程差别不是很大
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值