(四十)线程——概念

一、什么是线程

  线程,有时被称为轻量级进程(Lightweight Process,LWP),是程序执行流的最小单元。一个标准的线程由线程ID,当前指令指针(PC),寄存器集合和堆栈组成。另外,线程是进程中的一个实体,是被系统独立调度和分派的基本单位,线程自己不拥有系统资源,只拥有一点儿在运行中必不可少的资源,但它可与同属一个进程的其它线程共享进程所拥有的全部资源
  大致可以将线程看为一下几点:
  1.轻量级进程(light-weight process),也有PCB,创建线程使用的底层函数和进程一样,都是clone
  2.从内核里看进程和线程是一样的,都有各自不同的PCB,但是PCB中指向内存资源的三级页表是相同的(即公用内存空间)
  3.进程可以蜕变成线程
  4.在底层的工程师眼中,线程就是寄存器和栈
  5.在linux下,线程最是小的执行单位(cpu进行调度时,以线程为单位分配cpu的使用权)进程是最小的分配资源单位(创建进程的时候为其分配4g的虚拟内存空间,包括为其分配的信号的处理动作)
  
  
  
  察看LWP号:

$ ps -Lf pid(对应的进程id)
$ ps -eLf

这里写图片描述
  
  
  
  
  进程、线程、cpu调度、时间片之间的关系:
这里写图片描述
  
  
  


二、线程间共享哪些资源

  线程之间共享的资源有:
   1、文件描述符表
   2、每种信号的处理方式
   3、当前工作目录
   4、用户ID和组ID
   5、内存地址空间
   以及

  可执行的代码段(.text)
  读写数据段(.data 用于保存已初始化的全局变量和已初始化的全局变量)、
  非初始化数据段(.bss保存未初始化的全局变量和未初始化的静态变量、初始值都为0)
  堆
  共享库。

这里写图片描述
  
  


三、线程间不共享哪些资源

线程之间不共享的资源有:
 1.线程id(注:不是轻量级进程(lwp)。在进程中,每个线程都有自己的线程id、其作用域为自己的进程(eg:进程A不能访问进程B中的线程b)
 2.处理器现场和栈指针(内核栈)
 3.独立的栈空间(用户空间栈)
 4.errno变量
 5.信号屏蔽字
 6.调度优先级

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值