线程

线程的基本概念

  1. 为什么要引入线程?
    减少程序在并发执行时所付出的时空开销,提高操作系统的并发性能。
  2. 线程是进程中的一个实体,是被系统调度和分配的基本单位,但是线程不拥有系统资源,除了线程标识符等运行时必不可少的资源,线程与同属一个进程的其他线程共享进程的所有资源。
  3. 线程也有就绪、阻塞、运行三种状态。
  4. 引入线程后,进程只作为除CPU之外的系统资源的分配单位,线程则作为处理机的分配单位。

线程的属性

  1. 每个线程有一个唯一的标识符和一个线程控制块,线程控制块记录了线程执行的寄存器和栈等现场状态。
  2. 不同的线程可以执行相同的程序。
  3. 同一进程中的所有线程共享该进程的所有资源。
  4. 线程是处理机的独立调度单位,多个线程可以并发执行。单CPU系统各线程交替占用CPU;多CPU系统各线程可占用不同的CPU。

线程的实现方式

  1. 用户级线程(User-Level Thread,ULT)
    有关线程管理的所有工作都由应用程序完成,内核意识不到线程的存在。应用程序通过线程库设计成多线程程序。
  2. 内核级线程(Kernel-Level Thread,KLT)
    线程管理的工作由内核完成,应用程序没有线程管理的代码,只有一个到内核级线程的编程接口。
  3. 组合方式
    线程创建完全在用户空间完成,线程的调度和同步也在应用程序中完成。一个应用程序中的多个用户级线程被映射到一些(小于等于用户级线程的数目)内核级线程上。

多线程模型

有些系统同时支持用户线程和内核线程,由此产生了不同的多线程模型,即实现用户级线程和内核级线程的连接方式。

  1. 多对一模型
    多个用户级线程映射到一个内核级线程,线程管理在用户空间完成,效率较高,但一个线程被阻塞会导致整个进程阻塞。
  2. 一对一模型
    一个线程被阻塞,允许另一线程继续运行,并发性较强,但是开销较大,性能较弱。
  3. 多对多模型
    上述两种的折中方案,要求内核级线程数小于等于用户级线程数。

线程与进程的比较

  1. 线程是独立调度的基本单位,进程是拥有资源的基本单位。
  2. 进程和线程都可以并发执行。
  3. 进程切换的开销较大,线程切换时只需保存和设置少量寄存器的内容,开销较小。
  4. 进程的地址空间相互独立,线程共享进程的资源,线程对于其他进程不可见。
  5. 进程通信需要进程同步和互斥手段的辅助;线程间可以直接进行读/写进程数据段(如全局变量)来进行通信。

多线程和多任务

多任务是针对操作系统而言的,代表操作系统可以执行的程序个数;多线程是针对一个程序而言的,代表一个程序可以同时执行的线程个数,而每个线程可以完成不同的任务。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值