06 为什么需要多线程;多线程的优缺点;程序 进程 线程之间的关系;进程和线程之间的区别
为什么需要多线程
- CPU、内存、IO之间的性能差异巨大
- 多核心CPU的发展
- 线程的本质是增加一个可以执行代码工人
多线程的优点
多个执行流,并行执行。(多个工人,干不一样的活)
多线程的缺点
- 上下文切换慢,切换上下文典型值1us vs 0.3ns/cycle
CPU在执行A任务(A没有执行完)时,切换到任务B,需要保存A的上下文内容,等待CPU切换到执行A任务使用。需要消耗大概1000个时钟周期。
不是说多线程是可以提高效率,怎么又说多线程慢呢。这里慢单纯指的是线程之间切换时消耗的时间和CPU的时钟周期相比慢。针对内存寻址、硬盘寻址是有提升的。
- 占用资源:每个线程有独立的方法栈。
推荐阅读:我是一个CPU:这个世界慢!死!了!
线程相关概念
程序
程序(Program):程序的为了让计算机执行某些操作或解决某个问题而编写一系列
有序的指令集合。软件的目的:提高人们的工作效率,简化工作流程。静态概念。
进程
进程(Process):进程是计算机中的程序关于某数据集合上的一次运行活动,
是系统进行资源分配和调度的基本单位,是操作系统结构的基础。 动态概念。
进程的特点:
- 结构性:由程序块CODE、数据块DATA、控制块CPU 组成。
- 共享性:同一程序运行在不同的数据集上时构成不同的进程。即多个进程可以共享一个程序。(如一台电脑同时登陆多个QQ)
- 动态性:进程是程序在数据集合上的一次执行过程,是动态概念。它有生命周期,由创建、执行、消亡、。
- 独立性:每个进程都以各自独立的速度在CPU上执行。
- 并发性:进程的并发性能够提高资源的利用率和系统的效率。
- 制约性:并发进程之间存在制约关系,也需要相互等待或互通消息,保证程序执行的可再现性和计算结果的唯一性。
进程的状态:就绪态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代码示例࿰…...
无涯教程-Perl - endhostent函数
描述 此函数告诉系统您不再希望使用gethostent从hosts文件读取条目。 语法 以下是此函数的简单语法- endhostent返回值 此函数不返回任何值。 例 以下是显示其基本用法的示例代码- #!/usr/bin/perlwhile( ($name, $aliases, $addrtype, $length, addrs)gethostent() ) …...
Vue2使用easyplayer
说一下easyplayer在vue2中的使用,vue3中没测试,估计应该差不多,大家可自行验证。 安装: 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); 遍历方法: …...
【每日一题Day292】LC1572矩阵对角线元素的和 模拟
矩阵对角线元素的和【LC1572】](https://leetcode.cn/problems/matrix-diagonal-sum/) 思路 简单模拟,主对角线的元素横纵坐标相等,副对角线的元素横纵坐标相加为n-1,注意避免重复计算 实现 class Solution {public int diagonalSum(int[][]…...
Mongodb:业务应用(2)
需求: 1、获取保存到mongodb库中的搜索记录列表 2、实现删除搜索记录接口 保存搜索记录数据参考上篇Mongodb:业务应用(1)_Success___的博客-CSDN博客 获取记录列表 1、创建controller package com.heima.search.controller.v1;…...
DSO学习笔记
最近在学习DSO系列的代码,整理记录一下 DOS代码流程 TODO DSO跑kitti数据集 参考高翔大佬的LDSO中LDSO/examples/run_dso_kitti.cc,由于kitti数据集木有光度参数标定文件,其实最重要的就是相机内参文件camera.txt按照格式来就行了ÿ…...
【Windows 常用工具系列 5 -- 如何在网页(CSDN)中实现右上角及右下角数字显示】
文章目录 网页右上角/右下角标号写法 网页右上角/右下角标号写法 在网页撰写文章时经常遇到需要平方的写法,比如书写 X 的 2次方, 可以通过下面方法完成: <sup>x</sup> : x 上移到右上角;<sub>x</sub> : x 下移到右下角。 实…...
sql注入--报错注入
常用的简单测试语句和注释符号说明 sql语句的注释符号,是sq注入语句的关键点:常用 # 和 -- 1、# 和 --(有个空格)表示注释,可以使它们后面的语句不被执行。在url中,如果是get请求也就是我们在浏览器地址栏…...
Nginx常用功能
Nginx 介绍 Nginx 是开源、高性能、高可靠的 Web 和反向代理服务器,而且支持热部署,几乎可以做到 7 * 24 小时不间断运行,即使运行几个月也不需要重新启动,还能在不间断服务的情况下对软件版本进行热更新。性能是 Nginx 最重要的…...
【Express.js】express-validator
express-validator express.js 集成 express-validator进行数据校验 在最初的时候,对于请求的数据校验,我们是自定义一个中间件,然后在里面通过最原生的方式检验。在本节,我们将尝试用一种更优雅的方式进行数据校验。 准备工作…...
沁恒ch32V208处理器开发(三)GPIO控制
目录 GPIO功能概述 CH32V2x 微控制器的GPIO 口可以配置成多种输入或输出模式,内置可关闭的上拉或下拉电阻,可以配置成推挽或开漏功能。GPIO 口还可以复用成其他功能。端口的每个引脚都可以配置成以下的多种模式之一: 1 浮空输入 2 上拉输入…...
Jenkins 中 shell 脚本执行失败却不自行退出
Jenkins 中 执行 shell 脚本时,有时候 shell 执行失败了,或者判断结果是错误的,但是 Jenkins 执行完成后确提示成功 success 。 此时,可以通过条件判断来解决这个问题,让 Jenkins 强制退出并提示执行失败 failed 。 …...
2021年12月 C/C++(一级)真题解析#中国电子学会#全国青少年软件编程等级考试
第1题:输出整数部分 输入一个双精度浮点数f, 输出其整数部分。 时间限制:1000 内存限制:65536 输入 一个双精度浮点数f(0 < f < 100000000)。 输出 一个整数,表示浮点数的整数部分。 样例输入 3.8889 样例输出 3 下面是一个使用C语言编写的输出双精度浮点数整数部分…...
有哪些可以用于性能测试方法?【举例说明】
1.负载测试 在这里,负载测试指的是最常见的验证一般性能需求而进行的性能测试,在上面我们提到了用户最常见的性能需求就是“既要马儿跑,又要马儿少吃草”。因此负载测试主要是考察软件系统在既定负载下的性能表 现。我们对负载测试可以有如下…...
Android SQLite Asset Helper源码剖析:Utils与VersionComparator深度解析
Android SQLite Asset Helper源码剖析:Utils与VersionComparator深度解析 【免费下载链接】android-sqlite-asset-helper An Android helper class to manage database creation and version management using an applications raw asset files 项目地址: https:/…...
3个核心功能:Path of Building如何解决《流放之路》Build规划的三大痛点
3个核心功能:Path of Building如何解决《流放之路》Build规划的三大痛点 【免费下载链接】PathOfBuilding Offline build planner for Path of Exile. 项目地址: https://gitcode.com/GitHub_Trending/pa/PathOfBuilding 你有没有遇到过这样的情况࿱…...
5分钟精通MDCx Docker容器化部署:从零到生产环境的最佳实践
5分钟精通MDCx Docker容器化部署:从零到生产环境的最佳实践 【免费下载链接】mdcx-docker 在Docker容器中运行 MDCX,并通过Web界面或远程桌面进行控制。Run MDCX in a Docker container, accessible and controllable via a web interface or remote de…...
Spire.Office for .NET 8实战:从许可证困惑到成功激活,我的踩坑与避坑记录
Spire.Office for .NET 8实战:从许可证困惑到成功激活的深度解析 当我在新项目中首次接触Spire.Office组件时,本以为只需简单调用API就能轻松生成专业文档。然而现实却给了我一记响亮的耳光——那些顽固的水印如同牛皮癣般附着在每一页PDF上,…...
基于OpenAI CUA构建AI自动化任务:从原理到实践
1. 项目概述与核心价值最近在折腾AI驱动的自动化任务,特别是让AI模型直接操作浏览器完成一些重复性工作,OpenAI官方开源的openai-cua-sample-app项目就成了一个绝佳的参考。这个项目本质上是一个演示应用,展示了如何通过OpenAI的Responses AP…...
手把手教你用ESP8266(NodeMCU)的I2C接口同时读取温湿度、光照和空气质量传感器
用ESP8266打造多传感器环境监测系统:I2C接口实战指南 在智能家居和物联网项目中,环境数据采集是最基础也最关键的环节之一。想象一下,当你希望用一个设备同时监测房间的温度、湿度、光照和空气质量时,如何优雅地解决多个传感器的集…...
AutoHotkey编译器:5步完成脚本转EXE的完整指南
AutoHotkey编译器:5步完成脚本转EXE的完整指南 【免费下载链接】Ahk2Exe Official AutoHotkey script compiler - written itself in AutoHotkey 项目地址: https://gitcode.com/gh_mirrors/ah/Ahk2Exe 对于Windows自动化脚本开发者来说,将AutoHo…...
外观管理化技术中的外观计划外观实施外观验证
外观管理化技术是现代制造业中提升产品竞争力的重要手段,其核心流程包括外观计划、外观实施和外观验证三个关键环节。通过系统化的管理,企业能够确保产品外观设计符合市场需求,并在生产过程中保持一致性。本文将围绕这三个环节,从…...
Go语言的runtime.LockOSThread线程锁定与Cgo调用在并发中的互操作
Go语言的runtime.LockOSThread线程锁定与Cgo调用在并发中的互操作是高性能编程中一个关键但容易被忽视的话题。Go语言以其轻量级goroutine和高效的调度器闻名,但在与C语言交互时,线程绑定和并发控制可能带来意想不到的挑战。本文将深入探讨这一技术细节&…...
ARMv9 SME2指令集:高性能矩阵运算与AI加速
1. SME2指令集架构概述SME2(Scalable Matrix Extension 2)是ARMv9架构中面向高性能矩阵运算的扩展指令集,作为第一代SME的演进版本,它通过创新的多向量并行处理机制显著提升了计算密度。我在实际开发中发现,SME2最显著…...

