0%

线程基础概念

[toc]

3.1 概念#

  • 是基本的CPU执行单元
  • 是程序执行流的最小胆小
  • 被系统调度和分配的基本单位

3.1.1 目的#

  • 提高系统性能
  • 减小程序并发执行时的时空开销

3.1.2 组成#

  • 线程id
  • 程序计数器PC
  • 寄存器集合
  • 堆栈

3.1.3 实现方式#

一般会有2种线程:

  • 用户级线程ULT: 创建发生在用户空间
  • 系统级线程KLT: 完成系统内所有线程的管理,提供给用户一定的线程管理接口。

ULT和KLT的映射关系分类(即用户线程能给哪些系统线程管理):

  • 多用户线程对应1个系统线程。 即所有线程公用一个线程管理接口
    这样如果一旦阻塞就全部阻塞
  • 一对一: 每个用户线程单独使用1个系统线程做管理
    这样会导致系统线程过多,开销大
  • 多对多: n个用户线程对应m个内核线程(n>=m)
    这个比较好

linux用的是哪种呢?

3.2 进程和线程的区别#

  • 从调度上看
    线程是CPU调度的最小单位
    进程是拥有资源的基本单位
  • 切换
    同一进程内的线程之间切换,不用引起进程切换
    从a进程的线程跳到b进程的线程,需要引起进程切换
  • 资源
    线程只独立拥有一点点小资源(线程栈、共享虚拟地址空间)
    进程则拥有很多
  • 通信: 线程可通过读写进程的全局变量来通信,但是进程之间通信则无法依赖变量。
  • 开销
    线程的系统/时空开销少
  • 并发
    进程和线程都支持并发。
    是否支持并行要看CPU情况。

Q: 并发和并行有什么区别呢?#

A:

  • 并发指 在某一个时间段内跑多个任务, 这些任务可能抢占同一个CPU资源, ”存在交替执行“
  • 并行指 同一时刻,有多个任务同时在跑, 即分别占用不同的CPU跑任务。