线程与轻进程(OS)

news/2024/12/18 9:23:58/

目录

1、进程的引入

2、线程的概念

3、线程的结构

 3、线程控制块

5、线程的实现

(1)用户级别线程

(2)核心级别线程

(3)混合线程

6、线程的应用


1、进程的引入

进程切换

  • 上下文涉及内容多,开销大,“笨重” PCB+程序
  • 系统环境:地址空间,系统栈,打开文件表

相关进程之间耦合关系差

解决方案

  • Multi-threading
  • 同一进程中包含多个线程
  • 上下文只涉及寄存器和用户栈,切换速度快
  • 相关线程之间通讯方便、快捷

2、线程的概念

线程,又称为轻进程(light weight process,LEP),是进程中一个相对独立的执行流。

进程 vs.线程

  • 进程是资源分配单位
  • 线程是执行单位

多线程优点

  • 切换速度快(地址空间不变)(light weighted)
  • 系统开销小
  • 通讯容易(共享数据空间)

3、线程的结构

多进程结构

 

多线程结构
线程结构(另一种表达方式)

 3、线程控制块

线程控制块 TCB(Thread control block) 标志线程存在的数据结构, 其中包含对线程管理需要的全部信息。

与进程相似,线程也是并发执行的,即时断时续的。

内容:线程标识 、线程状态 、调度参数 、现场(通用寄存器,PC,SP) 、链接指针

存放位置

  • 用户级线程:目态空间(运行系统)
  • 核心级线程:系统空间

5、线程的实现

(1)用户级别线程

实现方法:

  • 基于library函数,系统不可见
  • 线程创建、撤销、状态转换在目态完成
  • TCB在用户空间,每个进程一个系统栈

优点: 不依赖于操作系统,调度灵活

            同一进程中多线程切换速度快(不需进入操作系统)

缺点: 同一进程中多个线程不能真正并行

           一个线程进入系统受阻,进程中其它线程不能执行

对于用户级别线程,

若同一进程中的多个线程中至少有一个处于运行态,则该进程的状态为运行态;

若同一进程的多个线程均不处在运行态,但至少有一个线程处于就绪态,则该进程处于就绪态;

若同意进程的多个线程均处于等待状态,则该进程处于等待状态。

(2)核心级别线程

实现方法:

  • 基于系统调用
  • 创建、撤销、状态转换由操作系统完成

优点: 同一进程内多线程可以并行执行

           一线程进入核心等待,其它线程仍可执行

缺点: 系统开销大,同一进程内多线程切换速度慢

           调度算法不能灵活控制

(3)混合线程

Solaris例子

User level thread:

  • 由Lib程序支持(创建,调度)

Light weighted process(LWP):

  • 由Lib程序支持
  • 每个task至少一个LWP
  • 用戶级别线程与LWP可以多对多
  • LWP对操作系统可见
  • 只有与LWP相联系的用户线程向前推进

Kernel level thread:

  • 由kernel 支持
  • 每个LWP与唯一一个核心线程对应 核心线程可与CPU多对多,可对一

 

6、线程的应用

内在的多控制流,需要共享数据 :生产-消费问题

多线程优于多进程 快100倍!

提高处理机与设备的并行性

多处理机环境:提高处理机利用率,加快进程推进速度

 

 


http://www.ppmy.cn/news/503824.html

相关文章

ROS:配置VScode

目录 前言一、下载二、vscode 安装三、vscode 集成 ROS 插件四、vscode 使用4.1 创建 ROS 工作空间4.2启动 vscode4.3vscode 中编译 ros4.4创建 ROS 功能包4.5C 实现4.6python 实现4.7配置 CMakeLists.txt4.8编译4.9执行 前言 VSCode 全称 Visual Studio Code,是微…

【jsDelivr】jsDelivr - 一个免费、快速、可靠的为JS和开源项目服务的CDN

文章目录 jsDelivr 简介jsDelivr 工作原理 jsDelivr加速域名如下cdn.jsdelivr.net 2023/06/21 域名解析结果fastly.jsdelivr.net 2023/06/21 域名解析结果gcore.jsdelivr.net 2023/06/21 域名解析结果test1.jsdelivr.net 2023/06/21 域名解析结果 仓库拓展 - 其他CDNnpmESMGitH…

ant+svn项目打包部署错误记录

安装ant可以参考下这个 http://t.csdn.cn/kx1ZX 第一个错误,原因是缺少ant-contrib.jar导致,将对应jar包放入ant的lib下即可 [taskdef] Could not load definitions from resource net/sf/antcontrib/antcontrib.properties. It could not be found. B…

LeetCode算法题---两数相加(二)

给你两个 非空 的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字。 请你将两个数相加,并以相同形式返回一个表示和的链表。 你可以假设除了数字 0 之外,这两个数都不会以 0 …

用Python写了一个「拥抱梅西」的小游戏

入门教程、案例源码、学习资料、读者群 请访问: python666.cn 大家好,欢迎来到 Crossin的编程教室 ! 最近有个小伙儿因为在比赛中冲进场地拥抱梅西而出名了。 这种行为当然不可取,他也为此付出了代价。但要说我没有一丁点羡慕和佩…

SAP:创建BP

FUNCTION zmd_partner_maintain . *"---------------------------------------------------------------------- *"*"本地接口: *" IMPORTING *" VALUE(IS_CENTRAL) TYPE ZSMM_VENDOR_GENERALS *" EXPORTING *" REFERENCE(EV_T…

深度学习算法3-BP神经网络

一、BP神经网络的概念 BP神经网络是一种多层的前馈神经网络,其主要的特点是:信号是前向传播的,而误差是反向传播的。具体来说,对于如下的只含一个隐层的神经网络模型: BP神经网络的过程主要分为两个阶段,…

标准BP算法用Python编程实现

1.需要导入两个模块 import pandas as pd import numpy as np2.定于激活函数 def sigmoid(x):return 1/(1np.exp(-x))3.标准BP算法 def BP(x_train,y_train,numb,inta): #x_train,y_train表示训练集,numb表示隐层神经元的个数,inta表示学习率#print(x_…