自我修养的笔记系列 2 —— 线程基础

基本概念

  1. 线程的定义: 有时被称为轻量级的进程(Lightweight Process,LWP),是程序执行流的最小单元
  2. 组成:
    1. 线程ID
    2. 当前指令指针(PC)
    3. 寄存器集合
    4. 堆栈
  3. 可多个并发执行, 共享进程的全局变量和堆的数据
  4. 优点:
    1. 分离计算和交互,有效利用某些等待操作的时间
    2. 处理并发任务,如多端下载
    3. 现在主流计算机本身硬件支持
    4. 高效的数据共享

线程的访问权限

  1. 可以访问进程内存里的所有数据
  2. 其它线程的堆栈(已知其它线程的堆栈地址)
  3. 私有存储空间,包括:
    1. 线程局部存储(Thread Local Storage, TLS), 容量有限
    2. 寄存器(执行流的基本数据)
线程私有线程共享
局部变量全局变量
函数的参数堆上的数据
TLS数据函数里的静态变量
程序代码,打开的文件

线程调度与优先级

  1. 线程的调度是由于处理器数量小于线程数量的情况下, 某个处理器需要执行多个线程以模拟并发状态从而需要调度不同线程的执行状态(三种):
    1. 运行(Running): 线程正在执行
    2. 就绪(Ready): 线程可以立即运行,但CPU被占用
    3. 等待(Waiting): 线程正在等待某个时间(通常时I/O),无法执行
  2. 时间片(Time Slice)的引入
  3. 主流的调度方式大多都包含:
    1. 轮转法(Round Robin):线程按照某一顺序轮流执行一小段时间
    2. 优先级调度(Priority Schedule):执行顺序的前后,有三种指定方式
      1. 用户指定
      2. 根据进入等待状态的频繁程度
      3. 长时间得不到执行而被提升优先级
  4. IO Bound Thread: IO密集型线程(更易获得优先级提升)
  5. CPU Bound Thread:CPU密集型线程
  6. 饿死(Starvation):低优先级的线程总是得不到CPU资源。
  7. 解决饿死:逐步提升等待时长的线程

可抢占线程和不可抢占线程

  1. 时间片用完交出CPU,Preemption。
  2. 线程主动放弃执行与否:
    1. 可抢占线程
    2. 不可抢占线程
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值