操作系统线程相关知识学习

一、线程的引入

进程中引入线程的三个原因:
  • 应用的需要:
    • 三个线程的字处理软件:一个负责键盘的输入;一个负责排版;一个负责保存。
    • 典型的应用: Web服务器:
                     工作方式:
                             1.从客户端接收网页的请求(Http协议)
     2.从磁盘上检索相关网页,读入内存
                             3.将网页返回给对应的客户端。
                     构造服务器的三种方法:
模型特性
多线程有并发、阻塞系统调用
单线程进程无并发、阻塞系统调用
有限状态机有并发、非阻塞系统调用、中断

  • 开销的考虑
    • 进程的相关操作:时间、空间开销大,限制了并发度提高
    • 线程的开销小(创建和撤销一个线程花费时间少,两个线程切换花费的时间少;线程之间相互通信无需调用内核(同意进程内的线程共享内存和文件))
  • 性能的考虑

二、线程的基本概念

1. 进程的两个基本单位
  • 资源的拥有者:进程还是资源的拥有者
  • COU调度单位:线程继承了这一属性
线程:进程中的一个运行实体,是CPU的调度单位,有时将线程称之为 轻量级的进程
其实就是在同一进程中增加了多个执行序列(线程)

2. 线程的属性

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

三、线程机制的实现

1.线程的实现

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

1.1 用户级线程


  •       在用户空间建立线程库:提供一组管理线程的过程
  •     运行时系统(Run-time system):完成线程的管理工作(操作线程表)
  •     内核管理的还是进程,不知道线程的存在
  •     线程切换不需要内核态特权
  •     例如  UNIX:  POSIX线程库---PTHREAD
    • POSIX(Porttable Operating System Interface)
    • 多线程编程接口,以线程库方式提供给用户(Pthread_create,Pthread_exit,Pthread_join,Pthread_yield,Pthread_attr_init,Pthread_attr_destory
Pthread_yield函数表示该线程自愿让出CPU。

用户级线程的优缺点:
优点:
    •   线程切换快
    •   调度算法是应用程序特定的
    •   用户级线程可运行在任何操作系统上(只需要实现线程库)
        缺点:
    •   内核只将处理器分配给进程。同一进程中两个线程不能同时运行于两个处理器上
    •   大多数系统调用是阻塞的,因此,由于内核阻塞进程,故进程中所有线程也被阻塞

1.2 核心级线程



  • 内核管理所有线程管理,并向应用程序提供API接口
  • 内核维护进程和线程的上下文
  • 线程的切换需要内核的支持
  • 以线程为单位进行调度 
  • 例如  windows
1.3  混合模型 

  • 线程的创建在用户空间完成
  • 线程的调度等在和心态完成
  • 例如 Solaris
  • 其实就是多个用户级线程多路复用多个内核级线程 
1.4 一个概念
可再入程序(可重入):可被多个进程同时复用的程序,具有一下性质:
  •    它是纯代码的,即在执行过程中自身不噶边;
  •    调用它的进程应该提供数据区


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值