Linux线程概念

在LInux中,线程就是轻量级的进程

线程和进程的关系

  1. 轻量级进程(light-weight process), 也有PCB, 创建线程使用的底层函数和进程一样都是clone
  2. 从内核里看进程和线程是一样的, 都有各自不同的PCB, 但是PCB中指向内存资源的三级页表是相同的
  3. 进程可以蜕变成线程
  4. 线程就是寄存器和栈
  5. 在Linux下, 线程就是最小的执行(CPU调度)单位, 进程是最小的资源分配单位

clone:

  在创建一个进程时用fork, 创建一个线程时用creat, 他们都调用底层的函数clone, 可以克隆PCB,0~3G的用户空间,操作系统并没有为用户提供直接创建线程的系统调用接口, 因此大佬们封装了一套线程库实现线程控制,因此我们创建的线程也叫用户态线程
  在内核中vfork创建一个子进程共用同一个虚拟地址空间, 怕出现调用栈混乱, 因此子进程运行完毕或程序替换后父进程才开始运行

多线程pcb使用同一个虚拟地址空间: 实现同时运行而不出现调用栈混乱----为每个线程在虚拟地址空间中单独分配一块空间

线程间共享资源

  1. .文件描述符表
  2. 每种信号的处理方式, 没有共享信号屏蔽字, 每个线程内部有自己独立的信号屏蔽字
  3. 当前工作目录
  4. 用户ID和组ID
  5. 内存地址空间

线程间非共享资源

  1. 线程id
  2. 处理器现场和栈指针(内核栈)
  3. 独立的栈空间(用户空间栈)
  4. errno变量
  5. 信号屏蔽字
  6. 调度优先级

线程的优点和缺点

优点:
  提高程序的并发性
  开销小, 不用重新分配内存
  通信和共享数据方便
  线程的执行粒度更细
缺点:
  线程不稳定(库函数实现)
  线程调试比较困难(gdb支持不好)
  线程无法使用UNIX经典事件,例如信号
  线程之间缺乏访问控制—系统调用(exit),
  异常针对整个进程, 健壮性低

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值