【操作系统】线程

JavaEE—线程

一、进程与线程

1.包含管理

2.资源布局

2.1公共资源

2.2私有资源

二、并发编程

1.多线程优势

1.1创建

1.1.1多线程

1.1.2多进程

1.2通信

1.2.1多线程

1.2.2多进程

1.3调度

1.3.1多线程

1.3.2多进程

1.4销毁

1.4.1多线程

1.4.2多进程

2.多进程优势

2.1安全性

2.1.1多进程

2.1.2多线程

2.2稳定性

2.2.1多进程

2.2.2多线程

三、线程数量

1.调度理想数量 

1.1调度提升效率

1.2黄金法则

2.数量过多

2.1调度占比上升

2.2CPU缓存失效

2.3线程争锁阻塞


一、进程与线程

进程:每个进程 对应一个PCB,是操作系统 资源分配的基本单位

线程:每个线程 对应一个TCB,是CPU 调度执行的基本单位

1.包含管理

PCB 包含管理 TCB,线程在进程里面创建每一个进程中 至少创建有一个主线程

2.资源布局

链接:进程的内存管理

2.1公共资源

同进程的线程TCB 指针指向对应 同一个PCB共用PCB的 内存指针、文件描述符表 指向的进程的公共资源,属于PCB的内核空间

2.2私有资源

每个线程各自不同的 状态、上下文、记账信息 都存储在 进程划分管理的 私有资源中,属于PCB的用户进程空间


二、并发编程

多进程与多线程 是实现并发编程的两种方式

1.多线程优势

同进程的多线程 互相共用配合,资源共享,轻量高效

1.1创建

1.1.1多线程

进程额外新建线程时,复用进程的 已申请的资源 来创建,创建轻便迅速,资源利用率高

1.1.2多进程
  1. 创建主线程时的进程,需要向操作系统 申请寻找分配资源相对耗时
  2. 每个进程中 只有一个主线程 单独使用资源资源利用率低

1.2通信

1.2.1多线程

同进程的线程 共享进程资源:

  • 使用相同虚拟地址指针 互访共用 内存
  • 使用相同fd 互访共用 文件

共用着资源访问 即可完成通信,通信效率高

1.2.2多进程

异进程的线程 需要跨进程 保持独立地通信通信效率低

链接:进程间通信


1.3调度

1.3.1多线程

同进程的线程 调度时 只需要切换寄存器上下文调度切换快

1.3.2多进程

异进程的线程 调度时 还需切换虚拟地址空间调度切换慢

链接:CPU的调度 


1.4销毁

1.4.1多线程

销毁进程的 普通线程时,只需释放 线程的少量私有资源销毁迅速

1.4.2多进程

销毁主线程时的进程,需要释放 进程所有的资源销毁缓慢


2.多进程优势

多进程间的线程 互相独立,资源安全隔离,稳定性高

2.1安全性

2.1.1多进程

异进程的线程 资源独立不会出现 争用同块资源线程安全

2.1.2多线程

同进程的线程 会出现 同时去访问同块资源 造成线程不安全,需要引入同步机制


2.2稳定性

2.2.1多进程

异进程的线程 互相独立某个线程异常崩溃 销毁所属进程 不会到影响彼此线程稳定性高

2.2.2多线程

同进程的线程 抛出异常,没有得到处理 会使整个进程崩溃从而销毁进程里 所有其它的线程线程稳定性低


三、线程数量

1.调度理想数量 

CPU执行指令1纳秒/条
线程I/O读取来执行指令10毫秒/次(比cpu指令执行慢1000万倍)
CPU调度切换1微秒/次

1.1调度提升效率

CPU快速执行完 当前线程的任务指令 还未等到 该线程下次的I/O读取来指令时,调度切换到另一个已I/O好的线程 不停息地 继续执行指令

1.2黄金法则

当调度的线程总量 使CPU刚好执行完每个线程的任务指令时 就调度切换,CPU达到 最高效的持续执行:

线程数 ≈ CPU核心数 * (1 + 等待时间/计算时间)

  • CPU密集型任务(计算) : 线程数 ≈ 核心数
  • I/O密集型任务(网络) : 线程数可多于核心数

2.数量过多

调度的线程数量过多 会导致CPU 执行效率降低:

2.1调度占比上升

在调度理想线程数量的基础上 再增加线程数量时,会使得CPU 未执行完当前线程任务指令时 就调度切换走CPU仍然不停息地 持续执行指令单位时间中 无用的调度切换 开始占比增大地 减少CPU有效执行指令的占比,使得CPU执行效率 开始下降

2.2CPU缓存失效

CPU缓存是为 连续计算优化的,要调度的线程过多 导致过于频繁切换线程时,缓存被冲刷,缓存命中率大幅下降,CPU缓存失效

2.3线程争锁阻塞

当线程任务过多时,会出现 很多线程同时争用同一块资源等锁 阻塞等待

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/diannao/90620.shtml
繁体地址,请注明出处:http://hk.pswp.cn/diannao/90620.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

React 自定义Hook——页面或元素滚动到底部监听 Hook

功能简介 useReachBottom 是一个 React 自定义 Hook,支持监听页面(body)或任意可滚动元素(如 div)是否滚动到底部。它能帮助你在用户滑动到底部时触发加载更多、显示提示等操作,极大提升前端交互体验。 亮…

当Powerbi遇到quickbi,性能优化方式对比

powerbi性能优化对于powerbi,性能优化可以从15个方面考虑: 1.过滤源数据【quickbi数据集过滤或sql过滤】2.删除无关列 【quickbi不选字段或sql不查询】3.聚合分析粒度 【quickbi使用sql聚合或计算字段聚合】4.整理字段 【quickbi使用sql聚合或计算字段聚…

ValueConverter转换器WPF

属性搭桥 比如BoolToVisibility 创建两个属性 Bool Visibility 这样不好 混乱了viewmodels 降低了泛用性系统自带的convertor <Window.Resources><BooleanToVisibilityConverter x:Key"booltovis"></BooleanToVisibilityConverter><…

Qt数据库编程详解:SQLite实战指南

Qt数据库编程详解&#xff1a;SQLite实战指南 目录 SQLite数据库简介Qt数据库核心类数据库操作全流程CRUD操作实战运行效果展示 1. SQLite数据库简介 SQLite是Qt内置的轻量级嵌入式数据库&#xff1a; #mermaid-svg-OiZ2cgq9n1G69iH5 {font-family:"trebuchet ms",…

FastAPI 与 OpenIddict 的微服务鉴权整合方案

架构概述基于微服务的身份认证架构采用OAuth 2.0/OpenID Connect协议&#xff0c;OpenIddict作为认证服务器&#xff0c;FastAPI作为资源服务器。系统包含三个核心组件&#xff1a;认证服务、API网关和业务微服务。OpenIddict负责颁发令牌&#xff0c;FastAPI通过JWT验证访问权…

计算两个点的欧式距离

目录 一、概述 二、公式 1、二维空间 2、三维空间 3、n 维空间 三、python实现 一、概述 欧式距离&#xff08;Euclidean Distance&#xff09;是一种在欧几里得空间中度量两个点之间距离的常用方法&#xff0c;其公式根据空间维度的不同而不同 二、公式 1、二维空间 对于二…

八股训练--RabbitMQ

一、经典问题 1.为什么要用MQ&#xff1f; MQ的作用主要是3个&#xff0c; 第一个是流量削峰&#xff1a;当某个活动举行时&#xff0c;访问量可能是平时的几百倍&#xff0c;可能一下会把服务器弄崩溃&#xff0c;所以通过MQ的形式&#xff0c;引入中间者&#xff0c;客户端…

Elasticsearch 文档检索系统

学习笔记&#xff1a;Elasticsearch 文档检索系统 1. 技术栈与核心组件 Node.js&#xff1a;后端运行环境&#xff0c;适合构建高性能 Web 服务。Express&#xff1a;Node.js 的 Web 框架&#xff0c;简化 API 开发。Elasticsearch&#xff1a;分布式全文检索引擎&#xff0c;支…

如何准确查看服务器网络的利用率?

在服务器运维与性能调优过程中&#xff0c;网络利用率是一个不容忽视的关键指标。它反映了服务器带宽资源的实际使用情况&#xff0c;是判断系统瓶颈、规划资源扩展、排查连接问题的重要依据。很多人误以为网络是否正常只要“能上网”或“Ping得通”就可以了&#xff0c;实际上…

掌握Spring声明式事务传播机制:AOP与ThreadLocal的协同工作

声明式事务的传播机制是解决多个事务方法嵌套调用时&#xff0c;事务如何创建、复用、挂起或隔离的核心逻辑。它的实现依赖于事务管理器、事务状态管理、线程上下文绑定等组件的协同&#xff0c;本质是通过一套 “规则判断 状态维护” 的逻辑&#xff0c;在方法调用时动态决定…

@Transactional事务注解的批量回滚机制

关键机制说明&#xff1a;1.​​事务注解生效​​&#xff1a;Transactional(rollbackFor Exception.class)Override Transactional(rollbackFor Exception.class) public Boolean saveUser(UserDTO userDto) {SysUser sysUser new SysUser();BeanUtils.copyProperties(user…

飞算 JavaAI 深度体验:开启 Java 开发智能化新纪元

个人主页&#xff1a;♡喜欢做梦 欢迎 &#x1f44d;点赞 ➕关注 ❤️收藏 &#x1f4ac;评论 目录 一、引言 二、飞算 JavaAI 初印象与功能概览 &#xff08;一&#xff09;初识飞算 JavaAI &#xff08;二&#xff09;核心功能模块概览 三、智能代码生成功能深度体…

pandas销售数据分析

pandas销售数据分析 数据保存在data目录 消费者数据&#xff1a;customers.csv商品数据&#xff1a;products.csv交易数据&#xff1a;transactions.csv customers.csv数据结构&#xff1a;字段描述customer_id客户IDgender性别age年龄region地区membership_date会员日期produc…

访问Windows服务器备份SQL SERVER数据库

以前没有直接访问过Windows服务器,今天刚一看到的是时候有点懵,竟然下意识的使用SecureCRT远程工具去连了一下,然后领导说,看一下用户名,突然意识到,跟我们平时远程桌面是一样的。 一、 win + R 打开命令窗口 二、 输入 mstsc 三、 输入远程地址 四、点击连接,如果有弹…

C++ 面向对象 - 对象定义方法汇总

C对象定义方法汇总 1. 栈上定义方式 1.1 调用无参构造函数的定义方式 无参构造函数有两种&#xff1a; 默认无参构造函数Demo(){}默认值列表构造函数。Demo():a{1},b{2}{} // 使用初始化列表实现对象定义方式&#xff1a; Demo d; Demo d1{}; // 以下定义方式还调用了拷贝构造…

指尖上的魔法:优雅高效的Linux命令手册

一、Linux基础指令 1. ls ls&#xff1a;对于目录&#xff0c;列出该目录下的所有子目录与文件&#xff0c;对于文件&#xff0c;将列出文件名以及其他信息。 -a&#xff1a;列出目录下的所有文件&#xff0c;包含以.开头的隐藏文件 -l:列出文件的详细信息 -d&#xff1a;将目录…

《磁力下载工具实测:资源搜索+高速下载一站式解决方案》

嘿&#xff0c;朋友们&#xff01;我是阿灿&#xff0c;今天给大家带来一个超实用的看片神器&#xff0c;特别适合老司机们使用&#xff0c;保证让你眼前一亮&#xff01;推荐一款比某雷更好用的下载工具&#xff0c;搭配资源搜索神器&#xff0c;轻松获取资源不限速。超强磁力…

Go网络编程基础:网络模型与协议栈概述 - 从理论到实践的完整指南

1. 引言 在当今的互联网时代&#xff0c;网络编程已经成为后端开发的核心技能。Go语言以其出色的并发性能和简洁的语法&#xff0c;在网络编程领域展现出了强大的优势。从Docker、Kubernetes到众多微服务框架&#xff0c;Go已经成为构建高性能网络应用的首选语言之一。 你是否…

Web攻防-SSTI服务端模版注入利用分类语言引擎数据渲染项目工具挖掘思路

知识点&#xff1a; 1、WEB攻防-SSTI-利用分类&功能点 2、WEB攻防-SSTI-利用项目&挖掘思路 SSTI(Server Side Template Injection) 服务器模板注入, 服务端接收了用户的输入&#xff0c;将其作为 Web 应用模板内容的一部分&#xff0c;在进行目标编译渲染的过程中&…

李沐动手学深度学习Pytorch-v2笔记【07自动求导代码实现】

文章目录前言自动求导实现非标量变量的反向传播分离计算Python控制流的梯度计算前言 关于走动求导的理论知识个人有点难以理解&#xff0c;推荐大家去看https://blog.csdn.net/weixin_42831564/article/details/135658138这篇文章&#xff0c;讲的很好。 自动求导实现 impor…