前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >操作系统-线程管理

操作系统-线程管理

作者头像
shysh95
发布2021-09-24 11:28:26
4210
发布2021-09-24 11:28:26
举报
文章被收录于专栏:shysh95

Hi~朋友,关注置顶防止错过消息

摘要

  1. 线程的概念
  2. 线程和进程的比较
  3. 线程的上下文切换
  4. 线程的实现方式

线程的概念

线程是计算机操作系统的最小调度资源,同一个进程内多个线程可以共享代码段、数据段、打开的文件等资源,但是每个线程都有一套独立的寄存器和栈,这样可以保证线程的控制流是独立的。

线程和进程的比较

线程的优缺点

优点:

  • 一个进程中可以有多个线程
  • 各个线程之间可以并发运行
  • 各个线程之间可以共享地址空间和文件资源

缺点:

  • 当进程中的一个线程崩溃时,会导致其所属进程的所有线程崩溃

线程和进程的区别

  • 进程时资源(包括内存、打开的文件等)分配的单位,线程时CPU调度的单位
  • 进程拥有一个完整的资源平台,线程只独享必不可少的资源,比如寄存器和栈
  • 线程和进程一样同样具有就绪、阻塞、运行三种基本状态
  • 线程能减少并发执行时间和空间开销

为什么线程可以减少开销?

  • 线程创建时间比进程快,线程在创建的过程中不涉及内存、文件等的申请和打开,因为一个进程的所有线程共享一块内存和文件资源
  • 线程的终止时间比进程快,因为线程释放的资源要比进程少
  • 线程的切换比进程快,因为同一个进程多个线程共享内存,因此不需要进行页表的切换,但是对于进程,需要页表切换,页表的切换开销相对较大
  • 统一进程的所有线程共享内存和文件资源,因此在线程之间传递数据时,不需要经过内核,数据交互效率变高

线程的上下文切换

线程在切换时,只需要切换线程私有数据、寄存器等不共享的数据。

线程的实现方式

线程实现方式

  • 用户线程:在用户空间实现的线程,不是由内核管理的线程,是由用户态的线程库来完成线程的管理
  • 内核线程:在内核中实现的线程,是由内核管理的线程
  • 轻量级进程:在内核中支持用户线程

用户线程和内核线程的对应关系

  • 多对一:多个用户线程对应同一个内核线程
  • 一对一:一个用户线程对应一个内核线程
  • 多对多:多个用线程对应到多个内核线程

用户线程

用户线程基于用户的线程库来管理实现,线程控制块(TCB)也在用户的库中实现,操作系统是无法知道TCB的存在的。

用户线程的调度和管理,操作系统无法直接参与,都是需要用户自己实现。

用户线程的优缺点

优点:

  • 每个进程都需要有私有的TCB列表,用来跟踪记录各个线程的状态信息(PC、栈指针、寄存器),TCB由用户自己实现,可用于不支持线程技术的操作系统
  • 用户线程的切换也是用户自己实现,无需用户态和内核态的切换,所以速度较快

缺点:

  • 由于操作系统不参与线程的调度,如果一个线程因发起系统调用阻塞,那么该进程包含的所有线程都无法执行
  • 线程在开始运行后,除非主动让出CPU,否则其他线程无法执行,因为用户态的线程无法打断当前运行中的线程,这种打断特权只有操作系统具备,但用户线程不受操作系统管理
  • 在多线程执行时,每个线程得到的时间片较少,执行较慢,因为时间片的划分是以进程为单位

内核线程

内核线程是由操作系统管理,线程的TCB也是存放在操作系统中。

内核线程的优缺点

优点:

  • 在一个进程中,如果某个内核线程发起系统调用而被阻塞,并不会影响其他内核线程的运行
  • 分配给线程,多线程的进程获得更多的CPU执行时间

缺点:

  • 在支持内核线程的操作系统中,由内核来维护进程和线程的上下文信息,如PCB和TCB
  • 线程的创建、终止和切换都是通过系统调用的方式进行,系统开销较大

轻量级进程

轻量级进程(LWP)是由内核支持的用户线程,一个进程可以有一个多个LWP,每个LWP跟内核线程一一对应。

在轻量级进程之上也是可以使用用户线程的,LWP与用户线程额对应关系有以下三种:

  • 1:1,一个LWP对应一个用户线程
  • N:1,一个LWP对应多个用户线程
  • M:N,多个LWP对应多个用户线程

1:1模式

优点:实现并行,当一个LWP阻塞时,不会影响其他LWP

缺点:每一个用户线程,就会产生一个内核线程,创建线程的开销过大

N:1模式

优点:用户线程多开影响较小,上下文切换发生在用户空间,切换的效率高

缺点:一个用户线程如果阻塞,整个进程都会阻塞,如果是在多核CPU中,无法充分利用CPU

M:N模式

将1:1和N:1的模式进行混搭,首先用户线程对应到多个LWP,LWP再一一对应到内核线程。

优点:结合了前两种模式的优点,并且大部分的线程上下文切换发生在用户空间,且多个线程又可以充分利用CPU的资源。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-09-22,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 程序员修炼笔记 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档