线程与线程机制的实现

来源:互联网 发布:mac wifi不能上网 编辑:程序博客网 时间:2024/05/21 18:30

线程的引入

为什么在进程中再派生线程?

三个理由
- 应用的需要
- 开销的考虑
- 性能的考虑

线程的基本概念

线程:进程中的一个运行实体,是CPU的调度单位
有时将线程称为轻量级进程

在同一进程增加了多个执行序列(线程)

线程的属性

  • 有标示符ID
  • 有状态及状态转换:需要提供一些操作
  • 不运行时需要保存的上下文
    有上下文环境:程序计数器等寄存器
  • 有自己的栈和栈指针
  • 共享所在进程的地址空间和其他资源
  • 可以创建、撤销另一个线程
    程序开始是以一个单线程进程方式运行的

线程机制的实现

  • 用户级线程
  • 核心级线程
  • 混合——两者结合方法

用户级线程

  • 在用户空间建立线程库:提供一组管理线程的过程
  • 运行时系统:完成线程的管理工作(操作、线程表)
  • 内核管理的还是进程,不知道线程的存在
  • 线程切换不需要内核态特权
  • 例子:UNIX
    用户级线程

例子:POSIX线程库——PTHREAD

  • POSIX(Portable Operating System Interface)
  • 多线程编程接口,以线程库方式提供给用户
Thread call Description Pthread_create Create a new thread Pthread_exit Terminate the calling thread Pthread_join Wait for a specific thread to exit Pthread_yield Release the CPU to let another thread run Pthread_attr_init Create and initialize a thread’s attribute structure Pthread_attr_destroy Remove a thread’s attribute structure

用户级线程小结

优点:
- 线程切换快
- 调度算法是应用程序特定的
- 用户级线程可运行在任何操作系统上(只需要实现线程库)

缺点:
- 内核只将处理器分配给进程,同一进程中的两个线程不能同时运行于两个处理器上
- 大多数系统调用是阻塞的,因此,由于内核阻塞进程,故进程中所有线程也被阻塞

核心级线程

  • 内核管理所有线程管理,并向应用程序提供API接口
  • 内核维护进程和线程的上下文
  • 线程的切换需要内核支持
  • 以线程为基础进行调度
  • 例子:Windows
    内核级线程

混合模型

  • 线程创建在用户空间完成
  • 线程调度等在核心态完成
  • 例子:Solaris

混合模型

多个用户级线程多路复用多个内核级线程


总结

进程

  • 并发性 任何进程都可以与其他进程一起向前推进
  • 动态性 进程是正在执行程序的实例
    • 进程是动态产生、动态消亡的
    • 进程在其生命周期内,在三种基本状态之间转换
  • 独立性 进程是资源分配的一个独立单位
    例如:各进程的地址空间相互独立
  • 交互性 指进程在执行过程中可能与其他进程产生直接或间接的关系
  • 异步性 每个进程都以其相对独立的、不可预知的速度向前推进
  • 进程映像 程序+数据+栈(用户栈、内核栈)+PCB

线程

  • 多线程应用场景
  • 线程基本概念、属性
  • 线程实现机制

可再入程序(可重入):
可被多个进程同时调用的程序,具有下列性质:
它是纯代码的,即在执行过程中自身不改变;
调用它的进程应该提供数据区

0 0
原创粉丝点击