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

【操作系统】线程

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.dtcms.com/a/273436.html

相关文章:

  • RabbitMQ 之消息积压
  • 从 Python 演进探寻 AI 与云对编程语言的推动
  • 【C/C++ shared_ptr 和 unique_ptr可以互换吗?】
  • 传输层协议UDP原理
  • 秋招小白学数据结构-1-数据结构前置知识
  • C Primer Plus 第6版 编程练习——第9章(上)
  • Umi-OCR 的 Docker(win制作镜像,Linux(Ubuntu Server 22.04)离线部署)
  • 微软语音合成标记语言SSML文档结构和事件(详细文档和实例)
  • 企业级配置:Azure 邮件与 Cloudflare 域名解析的安全验证落地详解
  • Unity Demo——3D平台跳跃游戏笔记
  • 一个与运行 Qwen3 大语言模型的 vLLM 服务进行通信的客户端程序
  • 利用BeautifulSoup解析大众点评区域店铺网页
  • WHQL认证失败怎么办?企业如何高效申请
  • 云、实时、时序数据库混合应用:医疗数据管理的革新与展望(上)
  • https——TCP+TLS
  • ChatGPT无法登陆?分步排查指南与解决方案
  • S7-1200 与 S7-300 CPS7-400 CP UDP 通信 Step7 项目编程
  • MS1826+MS9332 4K@30Hz HD4×2视频分割器
  • .net服务器Kestrel配置Nginx作为反向代理
  • 如何准确查看服务器网络的利用率?
  • 如何查看自己本地的公网IP地址?内网环境网络如何开通服务器公网ip提供互联网访问?
  • UDP服务器的优缺点都包含哪些?
  • Spring Boot主从服务器详解教程
  • 性能狂飙 Gooxi 8卡5090服务器重新定义高密度算力
  • 中国银联豪掷1亿采购海光C86架构服务器
  • 没有管理员权限,在服务器安装使用 Jupyter + R 内核
  • JVM 内存结构
  • QTextCodec的功能及其在Qt5及Qt6中的演变
  • RLHF(人类反馈的强化学习)
  • Java JDK 下载指南