当前位置: 首页 > news >正文

处理器管理补充——线程

传送门:操作系统——处理器管理icon-default.png?t=N7T8http://t.csdnimg.cn/avaDO

1.1 线程的概念

回忆:[未引入线程前] 进程有两个基本属性:拥有资源的独立单位、处理器调度和分配的基本单位。

引入线程以后,线程将作为处理器调度和运行的基本单位,进程作为分配资源的基本单位,计算机可以通过创建线程来完成任务,以减少程序并发执行时的时空开销。

线程的组成

  • 线程ID

  • 程序计数器

  • 寄存器集合

  • 堆栈

一个线程与同属一个进程的其它线程共享其代码段数据段和其它操作系统资源(如打开文件和信号)。

一个进程可以有多个控制线程,它就能同时做多个任务。因此,我们可以得知引入线程的目的是提高系统内程序并发执行的程度,进一步提高系统的吞吐量。

线程的特点

  • 线程是程序中一个单一的顺序控制流程

  • 在单个程序中可以同时运行多个线程完成不同的工作,称为多线程

  • 多线程是为了同步完成多项任务,通过提高资源使用效率来提高系统的效率

  • 多线程是在同一时间需要完成多项任务的时候实现的

1.2 多线程编程优点

  1. 响应程度高。如果对一个交互式应用程序采用多线程,即使它部分阻塞或执行较冗长的操作,那么,该程序仍然能继续工作,从而提高对用户的响应程度。

  2. 资源共享。线程默认共享自身所属进程的内存和资源。

  3. 经济。创建进程所需要的内存和资源的分配比较昂贵,而由于线程允许共享自身所属进程的资源,所以,创建线程和上下文切换会更经济。

  4. 多处理器体系结构的利用。多线程的优点之一是能充分使用多处理器体系结构,以便每个线程能够并行运行在不同的处理器上。

1.3 线程的实现

线程的实现主要分为两种方式:用户级线程内核级线程

用户级线程

  • 用户级线程仅存在于用户空间中

  • 用户级线程的创建、撤销、线程间的同步与通信等功能都无需通过系统调用来实现

  • 用户级线程的切换,常发生在一个应用进程的诸多线程之间,且无需内核的支持

  • 线程间的切换速度非常快(线程的切换规则简单)

  • 因为用户级线程与内核无关,所以,内核完全不知道用户级线程的存在

内核级线程

  • 内核级线程是在内核的支持下运行的

  • 内核线程的创建和管理要慢于用户线程的创建和管理(用户线程 > 内核线程)

  • 内核为每个内核级线程设置了一个PCB,内核根据该PCB感知线程的存在,并对其进行控制

1.4 多线程模型

多对一模型

  • 多对一模型将许多用户级线程映射到一个内核线程

  • 线程管理是在用户空间进行的,因此效率比较高

  • 如果一个线程执行了阻塞系统调用,那么,整个进程就会阻塞,而且,由于任何时刻只允许一个线程访问内核,因此多个线程不能并行运行在多处理器上

  • 该模型,处理器调度的单位仍然是进程

一对一模型

  • 一对一模型将每个用户线程映射到一个内核线程

  • 当一个线程执行阻塞时,该线程模型能够允许另一个线程继续执行,所以,它提供了比多对一模型更好的并发功能

  • 该模型允许多个线程运行在多处理器系统上

缺点:

  • 每创建一个用户线程就需要创建一个相应的内核线程。由于创建内核线程的开销会影响应用程序的性能,所以,这种模型的绝大多数实现限制了系统所支持的线程数量。

多对多模型

  • 多对多模型使用多路复用技术,使许多用户级线程映射到同样数量或更小数量的内核线程上

  • 多对多模型克服了前两种模型的缺点,开发人员可以创建任意多个必要的线程,并且相应的内核线程能够在多处理器系统上并行运行

  • 当一个线程执行阻塞系统调用时,内核能够调度另一个线程来执行

线程实现模型

1.5 线程池

流程:

  • 预先创建若干数量的线程,并让这些线程都处于睡眠状态,不消耗CPU资源

  • 当客户端有一个新请求时,就会唤醒线程池中的某一个睡眠线程,让它来处理客户端的这个请求

  • 当处理完这个请求后,线程又处于睡眠状态

基于这种预创建技术,线程池将线程创建和销毁所带来的开销均摊到各个具体的任务上,执行次数越多,每个任务分担到的线程自身开销就越小。

线程池具有以下优点:

  • (1) 用现有线程处理请求通常比等待创建新线程快

  • (2) 线程池限定了任何时候可存在线程的数量

相关文章:

处理器管理补充——线程

传送门:操作系统——处理器管理http://t.csdnimg.cn/avaDO 1.1 线程的概念 回忆:[未引入线程前] 进程有两个基本属性:拥有资源的独立单位、处理器调度和分配的基本单位。 引入线程以后,线程将作为处理器调度和运行的基本单位&…...

RESTful 风格是指什么

RESTful(Representational State Transfer)是一种基于 HTTP 协议的软件架构风格,用于设计网络应用程序的接口。它的设计理念是利用 HTTP 协议中的方法(如 GET、POST、PUT、DELETE 等)来对资源进行 CRUD,使得…...

Python 二维矩阵加一个变量运算该如何避免 for 循环

Python 二维矩阵加一个变量运算该如何避免 for 循环 引言正文方法1------使用 for 循环方法2------不使用 for 循环引言 今天写代码的时候遇到了一个问题,比如我们需要做一个二维矩阵运算,其中一个矩阵是 2x2 的,另一个是 2x1 的。在这个二维矩阵中,其中各个参数会随着一个…...

Nginx 配置详解

官网:http://www.nginx.org/ 序言 Nginx是lgor Sysoev为俄罗斯访问量第二的rambler.ru站点设计开发的。从2004年发布至今,凭借开源的力量,已经接近成熟与完善。 Nginx功能丰富,可作为HTTP服务器,也可作为反向代理服务…...

python读写文件操作的三大基本步骤

目录 基本步骤 常用函数 open()函数 close()函数 read()函数 readlines()函数 readline()函数 write()函数 writelines()函数 with语句 读写操作的应用: 拷贝文件 with 语句的嵌套 逐行拷贝 基本步骤 1. 打开文件:open(filepath, mode, en…...

《Go 简易速速上手小册》第3章:数据结构(2024 最新版)

文章目录 3.1 数组与切片:Go 语言的动态队伍3.1.1 基础知识讲解3.1.2 重点案例:动态成绩单功能描述实现代码扩展功能 3.1.3 拓展案例 1:数据分析功能描述实现代码扩展功能 3.1.4 拓展案例 2:日志过滤器功能描述实现代码扩展功能 3…...

雷达模拟触摸屏,支持tuio\鼠标\Touch

案例展示: 雷达精度测试 星秒雷达互动软件测试 功能说明: 雷达互动系统支持各种品牌雷达,支持4-256点校准(校准点越大精度越高 ,而市场上基本都是4点校准 ,碰到大面积范围无法保证精准度)&…...

一文了解大数据生态

大数据一词最早指的是传统数据处理应用软件无法处理的过于庞大或过于复杂的数据集。 现在,对“大数据”一词的使用倾向于使用预测分析、用户行为分析或者其他一些从大数据中提取价值的高级数据分析方法,很少用于表示特定规模的数据集。 定义 大数据是…...

Linux篇:指令

一 基本常识: 1. 文件文件内容文件的属性 2. 文件的操作对文件内容的操作对文件属性的操作 3. 文件的类型: d:目录文件 -:普通文件 4. 指令是可执行程序,指令的代码文件在系统的某一个位置存在的。/u…...

Linux eject命令教程:如何控制可移动介质的弹出和收回(附案例详解和注意事项)

Linux eject命令介绍 eject命令在Linux中用于弹出可移动介质,通常是CD-ROM、软盘、磁带或JAZ或ZIP磁盘。您还可以使用此命令来控制一些多盘CD-ROM切换器,一些设备支持的自动弹出功能,以及关闭一些CD-ROM驱动器的光盘托盘。 Linux eject命令…...

【已解决】PPT无法复制内容怎么办?

想要复制PPT文件里的内容,却发现复制不了,怎么办? 这种情况,一般是PPT文件被设置了以“只读方式”打开,“只读方式”下的PPT无法进行编辑更改,也无法进行复制粘贴的操作。 想要解决这个问题,我…...

六大设计原则 (SOLID)

一、设计原则概述 古人云: 有道无术,术可求.有术无道,止于术. 而设计模式通常需要遵循一些设计原则,在设计原则的基础之上衍生出了各种各样的设计模式。设计原则是设计要求,设计模式是设计方案,使用设计模式的代码则是具体的实现。 设计模式中主要有六大设计原则,简称为SOL…...

深度解析Sora的核心技术

Sora要解决的核心问题 Sora面临的挑战是将不同类型的视觉信息,如视频、文本、图像和声音等,整合为一种共同的表征形式。这种转换是实现统一训练过程的关键,旨在将各类数据集中到一个训练框架中,以便于进行大规模的统一学习。简而…...

设计模式面试系列-02

1. Java 中工厂模式有什么优势? 1、工厂模式是最常用的实例化对象模式,是用工厂方法代替new操作的一种模式。 2、利用工厂模式可以降低程序的耦合性,为后期的维护修改提供了很大的便利。 3、将选择实现类、创建对象统一管理和控制,从而将调用者跟我们的实现类解耦。 2. …...

MKdocs添加顶部公告栏

效果如图: docs/overrides下新建main.html ,针对main.html文件 树状结构如下: $ tree -a . ├── .github │ ├── .DS_Store │ └── workflows │ └── PublishMySite.yml ├── docs │ └── index.md │ └──overrides │…...

Android全新UI框架之常用ComposeUI组件

在Compose中,每个组件都是一个带有Composable注解的函数,被称为Composable。Compose已经预置了很多基于MD设计规范的Composable组件。 在布局方面,Compose提供了Column、Row、Box三种布局组件(感觉跟flutter差不多),类似于传统视图…...

网络防御保护综合练习

一、实验拓扑 二、实验要求 1, Fw1和Fw2组成主备模式的双机热备 2,DMZ区存在两台服务器,现在要求生产区的设备仅能在办公时间(9:00 - 18:00)访问,办公区的设备全天都可以访问。 3,办…...

Unity调用文心-ERNIE-Bot-turbo

参考文章 ERNIE-Bot-turbo - 千帆大模型平台 | 百度智能云文档 (baidu.com) 错误码 - 千帆大模型平台 | 百度智能云文档 (baidu.com) private readonly string apiKey "";private readonly string secretKey "";private readonly string tokenUrl &q…...

机器学习基本概念(李宏毅课程)

目录 一、概念:1、机器学习概念:2、深度学习概念: 二、深度学习中f(.)的输入和输出:1、输入:2、输出: 三、三种机器学习任务:1、Regression回归任务介绍:2、Classification分类任务介绍:3、Stru…...

浅谈WPF之利用RichTextBox实现富文本编辑器

在实际应用中,富文本随处可见,如留言板,聊天软件,文档编辑,特定格式内容等,在WPF开发中,如何实现富文本编辑呢?本文以一个简单的小例子,简述如何通过RichTextBox实现富文…...

微信小程序之bind和catch

这两个呢,都是绑定事件用的,具体使用有些小区别。 官方文档: 事件冒泡处理不同 bind:绑定的事件会向上冒泡,即触发当前组件的事件后,还会继续触发父组件的相同事件。例如,有一个子视图绑定了b…...

聊聊 Pulsar:Producer 源码解析

一、前言 Apache Pulsar 是一个企业级的开源分布式消息传递平台,以其高性能、可扩展性和存储计算分离架构在消息队列和流处理领域独树一帜。在 Pulsar 的核心架构中,Producer(生产者) 是连接客户端应用与消息队列的第一步。生产者…...

python爬虫:Newspaper3k 的详细使用(好用的新闻网站文章抓取和解析的Python库)

更多内容请见: 爬虫和逆向教程-专栏介绍和目录 文章目录 一、Newspaper3k 概述1.1 Newspaper3k 介绍1.2 主要功能1.3 典型应用场景1.4 安装二、基本用法2.2 提取单篇文章的内容2.2 处理多篇文档三、高级选项3.1 自定义配置3.2 分析文章情感四、实战案例4.1 构建新闻摘要聚合器…...

JDK 17 新特性

#JDK 17 新特性 /**************** 文本块 *****************/ python/scala中早就支持,不稀奇 String json “”" { “name”: “Java”, “version”: 17 } “”"; /**************** Switch 语句 -> 表达式 *****************/ 挺好的&#xff…...

Linux C语言网络编程详细入门教程:如何一步步实现TCP服务端与客户端通信

文章目录 Linux C语言网络编程详细入门教程:如何一步步实现TCP服务端与客户端通信前言一、网络通信基础概念二、服务端与客户端的完整流程图解三、每一步的详细讲解和代码示例1. 创建Socket(服务端和客户端都要)2. 绑定本地地址和端口&#x…...

SQL慢可能是触发了ring buffer

简介 最近在进行 postgresql 性能排查的时候,发现 PG 在某一个时间并行执行的 SQL 变得特别慢。最后通过监控监观察到并行发起得时间 buffers_alloc 就急速上升,且低水位伴随在整个慢 SQL,一直是 buferIO 的等待事件,此时也没有其他会话的争抢。SQL 虽然不是高效 SQL ,但…...

宇树科技,改名了!

提到国内具身智能和机器人领域的代表企业,那宇树科技(Unitree)必须名列其榜。 最近,宇树科技的一项新变动消息在业界引发了不少关注和讨论,即: 宇树向其合作伙伴发布了一封公司名称变更函称,因…...

MySQL 索引底层结构揭秘:B-Tree 与 B+Tree 的区别与应用

文章目录 一、背景知识:什么是 B-Tree 和 BTree? B-Tree(平衡多路查找树) BTree(B-Tree 的变种) 二、结构对比:一张图看懂 三、为什么 MySQL InnoDB 选择 BTree? 1. 范围查询更快 2…...

c# 局部函数 定义、功能与示例

C# 局部函数:定义、功能与示例 1. 定义与功能 局部函数(Local Function)是嵌套在另一个方法内部的私有方法,仅在包含它的方法内可见。 • 作用:封装仅用于当前方法的逻辑,避免污染类作用域,提升…...

Vue3中的computer和watch

computed的写法 在页面中 <div>{{ calcNumber }}</div>script中 写法1 常用 import { computed, ref } from vue; let price ref(100);const priceAdd () > { //函数方法 price 1price.value ; }//计算属性 let calcNumber computed(() > {return ${p…...