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

06 为什么需要多线程;多线程的优缺点;程序 进程 线程之间的关系;进程和线程之间的区别

为什么需要多线程

  • CPU、内存、IO之间的性能差异巨大
  • 多核心CPU的发展
  • 线程的本质是增加一个可以执行代码工人

多线程的优点

多个执行流,并行执行。(多个工人,干不一样的活)
在这里插入图片描述
在这里插入图片描述

多线程的缺点

  • 上下文切换慢,切换上下文典型值1us vs 0.3ns/cycle

CPU在执行A任务(A没有执行完)时,切换到任务B,需要保存A的上下文内容,等待CPU切换到执行A任务使用。需要消耗大概1000个时钟周期。

不是说多线程是可以提高效率,怎么又说多线程慢呢。这里慢单纯指的是线程之间切换时消耗的时间和CPU的时钟周期相比慢。针对内存寻址、硬盘寻址是有提升的。

  • 占用资源:每个线程有独立的方法栈。

推荐阅读:我是一个CPU:这个世界慢!死!了!

线程相关概念

程序

程序(Program):程序的为了让计算机执行某些操作或解决某个问题而编写一系列有序的指令集合

软件的目的:提高人们的工作效率,简化工作流程。静态概念。

进程

进程(Process):进程是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础。 动态概念。

进程的特点:

  1. 结构性:由程序块CODE、数据块DATA、控制块CPU 组成。
  2. 共享性:同一程序运行在不同的数据集上时构成不同的进程。即多个进程可以共享一个程序。(如一台电脑同时登陆多个QQ)
  3. 动态性:进程是程序在数据集合上的一次执行过程,是动态概念。它有生命周期,由创建、执行、消亡、。
  4. 独立性:每个进程都以各自独立的速度在CPU上执行。
  5. 并发性:进程的并发性能够提高资源的利用率和系统的效率。
  6. 制约性:并发进程之间存在制约关系,也需要相互等待或互通消息,保证程序执行的可再现性和计算结果的唯一性。

进程的状态:就绪态ready、运行态running、阻塞blocked

进程的缺点占用较多的系统资源,浪费内存。

线程

线程(Thread):是操作系统进程中能够独立执行的实体(控制流),是处理器调度和分派的基本单位。 可以看成是进程内的多条执行路径。

进程的特点:并发性、共享性、动态性、结构性

  • 线程是轻量级的进程
  • 一个进程可以并行多个线程
  • 进程中的线程共享内存
  • 线程间通讯在共享内存中的地址空间上执行,不需要额外的通讯机制,故速度更快。
区别进程线程
本质区别程序是计算机分配资源单位线程是进程中CPU调度和执行的单位
开销进程有独立的计算机资源,进程间切换会有较大的开销线程可以当做轻量级进程,线程间资源共享,切换开销小
内存分配计算机会给进程分配独立的内存资源线程使用所在进程的资源
关系内有线程的进程可以当做单线程;一个进程可以有多个线程线程是进程的一部分,线程可以当做一个轻量级的进程

相关文章:

06 为什么需要多线程;多线程的优缺点;程序 进程 线程之间的关系;进程和线程之间的区别

为什么需要多线程 CPU、内存、IO之间的性能差异巨大多核心CPU的发展线程的本质是增加一个可以执行代码工人 多线程的优点 多个执行流,并行执行。(多个工人,干不一样的活) 多线程的缺点 上下文切换慢,切换上下文典型值…...

datax-web报错收集

在查看datax时发现日志出现了如上错误,因为项目是部署在本地linux虚拟机上的,使用的是nat网络地址转换,不知道为什么虚拟机的端口号发生了变化,导致数据库根本连接不进去,更新linux虚拟机的ip地址就好...

YOLO相关原理(文件结构、视频检测等)

超参数进化(hyperparameter evolution) 超参数进化是一种使用了genetic algorithm(GA)遗传算法进行超参数优化的一种方法。 YOLOv5的文件结构 images文件夹内的文件和labels中的文件存在一一对应关系 激活函数:非线性处理单元 activation f…...

深入解析Spring Boot的核心特性与示例代码

系列文章目录 文章目录 系列文章目录前言一、自动配置(Auto-Configuration)二、起步依赖(Starter Dependencies)三、命令行界面(CLI)四、微服务支持五、内嵌Web服务器六、配置文件管理七、简化的日志配置八、健康检查与监控九、注解驱动开发十、外部化配置总结前言 Spri…...

什么是Java中的观察者模式?

Java中的观察者模式是一种设计模式,它允许一个对象在状态发生改变时通知它的所有观察者。这种模式在许多情况下都非常有用,例如在用户界面中,当用户与界面交互时,可能需要通知其他对象。 下面是一个简单的Java代码示例&#xff0…...

无涯教程-Perl - endhostent函数

描述 此函数告诉系统您不再希望使用gethostent从hosts文件读取条目。 语法 以下是此函数的简单语法- endhostent返回值 此函数不返回任何值。 例 以下是显示其基本用法的示例代码- #!/usr/bin/perlwhile( ($name, $aliases, $addrtype, $length, addrs)gethostent() ) …...

Vue2使用easyplayer

说一下easyplayer在vue2中的使用&#xff0c;vue3中没测试&#xff0c;估计应该差不多&#xff0c;大家可自行验证。 安装&#xff1a; pnpm i easydarwin/easyplayer 组件封装 习惯性将其封装为单独的组件 <template><div class"EasyPlayer"><e…...

Map映射学习

一、Map的遍历 创建Map集合 Map<String, Integer> map new HashMap<>();添加元素 map.put("java", 99);map.put("c", 88);map.put("c", 93);map.put("python", 96);map.put("Go", 88); 遍历方法&#xff1a; …...

【每日一题Day292】LC1572矩阵对角线元素的和 模拟

矩阵对角线元素的和【LC1572】](https://leetcode.cn/problems/matrix-diagonal-sum/) 思路 简单模拟&#xff0c;主对角线的元素横纵坐标相等&#xff0c;副对角线的元素横纵坐标相加为n-1&#xff0c;注意避免重复计算 实现 class Solution {public int diagonalSum(int[][]…...

Mongodb:业务应用(2)

需求&#xff1a; 1、获取保存到mongodb库中的搜索记录列表 2、实现删除搜索记录接口 保存搜索记录数据参考上篇Mongodb&#xff1a;业务应用&#xff08;1&#xff09;_Success___的博客-CSDN博客 获取记录列表 1、创建controller package com.heima.search.controller.v1;…...

DSO学习笔记

最近在学习DSO系列的代码&#xff0c;整理记录一下 DOS代码流程 TODO DSO跑kitti数据集 参考高翔大佬的LDSO中LDSO/examples/run_dso_kitti.cc&#xff0c;由于kitti数据集木有光度参数标定文件&#xff0c;其实最重要的就是相机内参文件camera.txt按照格式来就行了&#xff…...

【Windows 常用工具系列 5 -- 如何在网页(CSDN)中实现右上角及右下角数字显示】

文章目录 网页右上角/右下角标号写法 网页右上角/右下角标号写法 在网页撰写文章时经常遇到需要平方的写法&#xff0c;比如书写 X 的 2次方, 可以通过下面方法完成&#xff1a; <sup>x</sup> : x 上移到右上角;<sub>x</sub> : x 下移到右下角。 实…...

sql注入--报错注入

常用的简单测试语句和注释符号说明 sql语句的注释符号&#xff0c;是sq注入语句的关键点&#xff1a;常用 # 和 -- 1、# 和 --&#xff08;有个空格&#xff09;表示注释&#xff0c;可以使它们后面的语句不被执行。在url中&#xff0c;如果是get请求也就是我们在浏览器地址栏…...

Nginx常用功能

Nginx 介绍 Nginx 是开源、高性能、高可靠的 Web 和反向代理服务器&#xff0c;而且支持热部署&#xff0c;几乎可以做到 7 * 24 小时不间断运行&#xff0c;即使运行几个月也不需要重新启动&#xff0c;还能在不间断服务的情况下对软件版本进行热更新。性能是 Nginx 最重要的…...

【Express.js】express-validator

express-validator express.js 集成 express-validator进行数据校验 在最初的时候&#xff0c;对于请求的数据校验&#xff0c;我们是自定义一个中间件&#xff0c;然后在里面通过最原生的方式检验。在本节&#xff0c;我们将尝试用一种更优雅的方式进行数据校验。 准备工作…...

沁恒ch32V208处理器开发(三)GPIO控制

目录 GPIO功能概述 CH32V2x 微控制器的GPIO 口可以配置成多种输入或输出模式&#xff0c;内置可关闭的上拉或下拉电阻&#xff0c;可以配置成推挽或开漏功能。GPIO 口还可以复用成其他功能。端口的每个引脚都可以配置成以下的多种模式之一&#xff1a; 1 浮空输入 2 上拉输入…...

Jenkins 中 shell 脚本执行失败却不自行退出

Jenkins 中 执行 shell 脚本时&#xff0c;有时候 shell 执行失败了&#xff0c;或者判断结果是错误的&#xff0c;但是 Jenkins 执行完成后确提示成功 success 。 此时&#xff0c;可以通过条件判断来解决这个问题&#xff0c;让 Jenkins 强制退出并提示执行失败 failed 。 …...

2021年12月 C/C++(一级)真题解析#中国电子学会#全国青少年软件编程等级考试

第1题:输出整数部分 输入一个双精度浮点数f, 输出其整数部分。 时间限制:1000 内存限制:65536 输入 一个双精度浮点数f(0 < f < 100000000)。 输出 一个整数,表示浮点数的整数部分。 样例输入 3.8889 样例输出 3 下面是一个使用C语言编写的输出双精度浮点数整数部分…...

计算机网络 网络层 IPv4数据报

...

有哪些可以用于性能测试方法?【举例说明】

1.负载测试 在这里&#xff0c;负载测试指的是最常见的验证一般性能需求而进行的性能测试&#xff0c;在上面我们提到了用户最常见的性能需求就是“既要马儿跑&#xff0c;又要马儿少吃草”。因此负载测试主要是考察软件系统在既定负载下的性能表 现。我们对负载测试可以有如下…...

Zustand 状态管理库:极简而强大的解决方案

Zustand 是一个轻量级、快速和可扩展的状态管理库&#xff0c;特别适合 React 应用。它以简洁的 API 和高效的性能解决了 Redux 等状态管理方案中的繁琐问题。 核心优势对比 基本使用指南 1. 创建 Store // store.js import create from zustandconst useStore create((set)…...

Spring Boot 实现流式响应(兼容 2.7.x)

在实际开发中&#xff0c;我们可能会遇到一些流式数据处理的场景&#xff0c;比如接收来自上游接口的 Server-Sent Events&#xff08;SSE&#xff09; 或 流式 JSON 内容&#xff0c;并将其原样中转给前端页面或客户端。这种情况下&#xff0c;传统的 RestTemplate 缓存机制会…...

macOS多出来了:Google云端硬盘、YouTube、表格、幻灯片、Gmail、Google文档等应用

文章目录 问题现象问题原因解决办法 问题现象 macOS启动台&#xff08;Launchpad&#xff09;多出来了&#xff1a;Google云端硬盘、YouTube、表格、幻灯片、Gmail、Google文档等应用。 问题原因 很明显&#xff0c;都是Google家的办公全家桶。这些应用并不是通过独立安装的…...

【算法训练营Day07】字符串part1

文章目录 反转字符串反转字符串II替换数字 反转字符串 题目链接&#xff1a;344. 反转字符串 双指针法&#xff0c;两个指针的元素直接调转即可 class Solution {public void reverseString(char[] s) {int head 0;int end s.length - 1;while(head < end) {char temp …...

Java-41 深入浅出 Spring - 声明式事务的支持 事务配置 XML模式 XML+注解模式

点一下关注吧&#xff01;&#xff01;&#xff01;非常感谢&#xff01;&#xff01;持续更新&#xff01;&#xff01;&#xff01; &#x1f680; AI篇持续更新中&#xff01;&#xff08;长期更新&#xff09; 目前2025年06月05日更新到&#xff1a; AI炼丹日志-28 - Aud…...

vue3 定时器-定义全局方法 vue+ts

1.创建ts文件 路径&#xff1a;src/utils/timer.ts 完整代码&#xff1a; import { onUnmounted } from vuetype TimerCallback (...args: any[]) > voidexport function useGlobalTimer() {const timers: Map<number, NodeJS.Timeout> new Map()// 创建定时器con…...

什么是Ansible Jinja2

理解 Ansible Jinja2 模板 Ansible 是一款功能强大的开源自动化工具&#xff0c;可让您无缝地管理和配置系统。Ansible 的一大亮点是它使用 Jinja2 模板&#xff0c;允许您根据变量数据动态生成文件、配置设置和脚本。本文将向您介绍 Ansible 中的 Jinja2 模板&#xff0c;并通…...

处理vxe-table 表尾数据是单独一个接口,表格tableData数据更新后,需要点击两下,表尾才是正确的

修改bug思路&#xff1a; 分别把 tabledata 和 表尾相关数据 console.log() 发现 更新数据先后顺序不对 settimeout延迟查询表格接口 ——测试可行 升级↑&#xff1a;async await 等接口返回后再开始下一个接口查询 ________________________________________________________…...

在Mathematica中实现Newton-Raphson迭代的收敛时间算法(一般三次多项式)

考察一般的三次多项式&#xff0c;以r为参数&#xff1a; p[z_, r_] : z^3 (r - 1) z - r; roots[r_] : z /. Solve[p[z, r] 0, z]&#xff1b; 此多项式的根为&#xff1a; 尽管看起来这个多项式是特殊的&#xff0c;其实一般的三次多项式都是可以通过线性变换化为这个形式…...

深度剖析 DeepSeek 开源模型部署与应用:策略、权衡与未来走向

在人工智能技术呈指数级发展的当下&#xff0c;大模型已然成为推动各行业变革的核心驱动力。DeepSeek 开源模型以其卓越的性能和灵活的开源特性&#xff0c;吸引了众多企业与开发者的目光。如何高效且合理地部署与运用 DeepSeek 模型&#xff0c;成为释放其巨大潜力的关键所在&…...