并发编程理论基础——合适的线程数量和安全的局部变量(十)
多线程的提升方向
- 主要方向在于优化算法和将硬件的性能发挥到极致
- 想要发挥出更多的硬件性能,最主要的就是提升I/O的利用率和CPU的利用率以及综合利用率
- 操作系统已经解决了磁盘和网卡的利用率问题,利用中断机制还能避免 CPU 轮询 I/O 状态,也提升了 CPU 的利用率。但是操作系统解决硬件利用率问题的对象往往是单一的硬件设备,而我们的并发程序,往往需要 CPU 和 I/O 设备相互配合工作,也就是说,我们还需要解决 CPU 和 I/O 设备综合利用率的问题。
- 如果 CPU 和 I/O 设备的利用率都很低,那么可以尝试通过增加线程来提高吞吐量。
创建多少线程数合适
- 我们的程序一般都是CPU和I/O操作交互执行的,其中I/O设备的速度要比CPU慢的多,所以I/O操作时间也要比CPU操作时间长的多,这种情况被称为I/O密集型计算
- 最佳的线程数是与程序中 CPU 计算和 I/O 操作的耗时比相关的
- (单核)最佳线程数 =1 +(I/O 耗时 / CPU 耗时)
- (多核)最佳线程数 =CPU 核数 * [ 1 +(I/O 耗时 / CPU 耗时)]
- 还有一个与之相对的被称为CPU密集型计算,大部分场景下都是纯CPU计算
- 对于 CPU 密集型的计算场景,理论上“线程的数量 =CPU 核数”就是最合适的
- 不过在工程上,线程的数量一般会设置为“CPU 核数 +1”,这样的话,当线程因为偶尔的内存页失效或其他原因导致阻塞时,这个额外的线程可以顶上,从而保证 CPU 的利用率。
注意:工作中都是按照逻辑核数来的,理论值和经验值仅供参考,实际上还是要靠压测

方法是怎么执行的
当你调用一个方法时,CPU 要先找到方法的地址,然后跳转到这个地址去执行代码,最后 CPU 执行完方法后返回。
CPU 去哪里找到调用方法的参数和返回地址以及局部变量
- 通过 CPU 的堆栈寄存器,CPU支持的栈结构被称为调用栈
- 每个方法在调用栈里都有自己的独立空间,称为栈帧,每个栈帧里都有对应方法需要的参数和返回地址以及局部变量。当调用方法时,会创建新的栈帧,并压入调用栈;当方法返回时,对应的栈帧就会被自动弹出。也就是说,栈帧和方法是同生共死的。
- 调用栈和线程之间是什么关系:每个线程都有自己独立的调用栈。
- 局部变量的作用域是方法内部,也就是说当方法执行完,局部变量就没用了
Java 方法里面的局部变量是否存在并发问题:
没有。因为每个线程都有自己的调用栈,局部变量保存在线程各自的调用栈里面,不会共享,所以自然也就没有并发问题。
相关文章:
并发编程理论基础——合适的线程数量和安全的局部变量(十)
多线程的提升方向 主要方向在于优化算法和将硬件的性能发挥到极致想要发挥出更多的硬件性能,最主要的就是提升I/O的利用率和CPU的利用率以及综合利用率操作系统已经解决了磁盘和网卡的利用率问题,利用中断机制还能避免 CPU 轮询 I/O 状态,也提…...
Python使用抽象工厂模式和策略模式的组合实现生成指定长度的随机数
设计模式选择理由: 抽象工厂模式: 抽象工厂模式适合于创建一组相关或依赖对象的场景。在这里,我们可以定义一个抽象工厂来创建不同类型(数字、字母、特殊符号)的随机数据生成器。 策略模式: 策略模式允许你…...
python-17-零基础自学python-
学习内容:《python编程:从入门到实践》第二版 知识点: 类、子类、继承、调用函数 练习内容: 练习9-6:冰激凌小店 冰激凌小店是一种特殊的餐馆。编写一个名为IceCreamStand的类,让它继承为完成练习9-1或…...
Web应用和Tomcat的集成鉴权1-BasicAuthentication
作者:私语茶馆 1.Web应用与Tomcat的集成式鉴权 Web应用部署在Tomcat时,一般有三层鉴权: (1)操作系统鉴权 (2)Tomcat容器层鉴权 (3)应用层鉴权 操作系统层鉴权包括但不限于:Tomcat可以和Windows的域鉴权集成,这个适合企业级的统一管理。也可以在Tomcat和应用层独立…...
解决Linux下Java应用因内存不足而崩溃的问题
在Linux系统中运行内存密集型的Java应用时,经常会遇到因系统内存不足而导致应用崩溃的问题。本文将探讨如何诊断这类问题以及提供有效的解决方案。 问题诊断 首先,使用 free -h 命令查看系统的内存使用情况,得到以下输出: total…...
ardupilot开发 --- 视觉伺服 篇
风驰电掣云端飘,相机无法对上焦 1.视觉伺服分类2.视觉伺服中的坐标系3.成像模型推导4.IBVS理论推导5.IBVS面临的挑战6.visp 实践参考文献 1.视觉伺服分类 控制量是在图像空间中推导得到还是在欧式空间中推导得到,视觉伺服又可以分类为基于位置(PBVS)和基…...
KVM配置嵌套虚拟化
按照以下步骤启用、配置和开始使用嵌套虚拟化,默认情况下禁用该功能,要启用它,请在宿主机物理机上进行配置。在centos stream 9和ubuntu 22部署kvm默认支持虚拟机嵌套虚拟化。 1、英特尔 1.1检查嵌套虚拟化在您的主机系统上是否可用 $cat /sys/module/kvm_intel/paramete…...
Springboot应用的信创适配-补充
Springboot应用的信创适配-CSDN博客 因为篇幅限制,这里补全Spring信创适配、数据库信创适配、Redis信创适配、消息队列信创适配等四个章节。 Springboot应用的信创适配 Springboot应用的信创适配,如上图所示需要适配的很多,从硬件、操作系统、…...
制图工具(14)导出图层字段属性信息表
在制图工具(13)地理数据库初始化工具中我们提到,有一个参数为:“输入Excel表”,并要求表格中的图层字段属性项需要按工具的帮助文档中的示例进行组织… 如下图: 此外,总有那个一个特别的需求&am…...
代码随想录——买股票的最佳时机Ⅱ(Leecode122)
添加链接描述 贪心 局部最优:手机每天的正利润 全局最优:求最大利润 class Solution {public int maxProfit(int[] prices) {int res 0;for(int i 1; i < prices.length; i){res Math.max(prices[i] - prices[i - 1], 0);}return res;} }...
使用Servlet开发javaweb,请求常见错误详解及其解决办法【404、405、500】
Servlet报错的情况多种多样,涵盖了配置错误、代码逻辑错误、资源未找到、权限问题等多个方面。以下是一些常见的Servlet报错情况及其可能的原因和解决方法: 404 Not Found: 错误原因图示: URL映射 发送请求,出现404错误 原因: 请…...
数据库管理-第210期 HaloDB-Oracle兼容性测试02(20240622)
数据库管理210期 2024-06-22 数据库管理-第210期 HaloDB-Oracle兼容性测试02(20240622)1 表增加列2 约束3 自增列4 虚拟列5 表注释6 truncat表总结 数据库管理-第210期 HaloDB-Oracle兼容性测试02(20240622) 作者:胖头…...
SpringBoot实现定时任务的动态停止和更新
目录 定时任务管理器定时任务的任务接口定时任务和定时任务结果的缓存对象定时任务使用姿势 定时任务管理器 负责启动一个定时任务、停止一个定时任务、更新一个定时任务 /*** 定时任务管理器* 1、创建并启动一个定时任务* 2、停止一个定时任务* 3、更新一个定时任务*/ publi…...
【threejs】火焰特效制作
2024-06-26 08-57-16火焰 shader 来源 //shadertory:https://www.shadertoy.com/view/ctVGD1//shadertory:https://www.shadertoy.com/view/ml3GWs 代码 import { DoubleSide, ShaderChunk, ShaderMaterial } from "three";export default fu…...
五原则四实践,REST API安全性请谨记
云原生和微服务架构等技术的流行让API受到越来越大的重视。那么当应用程序开始上云,各项需求都可以通过云服务满足的情况下,应用程序,尤其基于云端API的应用程序的安全问题该如何解决? 表现层状态转移(REST࿰…...
1390:食物链【NOI2001】
【解题思路】 并查集把三类动物划分成三个域,同类域(1-n)、捕食域〈n1-2n)、天敌域(2n1-3n)。把x放入同类域,xn放入其捕食域,x2n放入其天敌域。给在其他集合内安插两个“虚拟代表”…...
ICMAN液位检测——WS003B管道检测模组
ICMAN液位检测之WS003B管道检测模组 体积小,成本低, 液位检测精度高, 有水输出低电平无水高电平, 适用于饮水机、咖啡机、扫地机器人、洗地机等, 有需要朋友快联系我吧! AWE展会不容错过的ICMAN检测模组…...
YOLOv10使用教程及导读
首先推荐一下我的YOLOv8/v10项目,仅需一个v8的钱(69.9),付费进群,即可获取v8/v10的全部改进,欢迎进群。 1 YOLOv10简介 论文链接:https://arxiv.org/pdf/2405.14458 官方代码链接:ht…...
AIGC 在前端流式获取内容SSE
AIGC 在前端流式获取内容SSE 简介具体实现 简介 在 OpenAI 的 API 中,SSE 通常用于实现实时数据传输。例如,在聊天模型(如 ChatGPT)中,使用 SSE 可以让客户端实时接收到生成的对话内容,而不需要等待整个响…...
深度解析安全阀检测技术:方法与挑战
在工业生产中,安全阀作为防止压力容器和管道发生过压事故的关键部件,其性能和可靠性对于保证设备安全和人员安全具有重要意义。随着工业化进程的不断深入,对安全阀的检测和维护工作也日益受到重视。 接下来,佰德旨在探讨安全阀检…...
Vim 调用外部命令学习笔记
Vim 外部命令集成完全指南 文章目录 Vim 外部命令集成完全指南核心概念理解命令语法解析语法对比 常用外部命令详解文本排序与去重文本筛选与搜索高级 grep 搜索技巧文本替换与编辑字符处理高级文本处理编程语言处理其他实用命令 范围操作示例指定行范围处理复合命令示例 实用技…...
逻辑回归:给不确定性划界的分类大师
想象你是一名医生。面对患者的检查报告(肿瘤大小、血液指标),你需要做出一个**决定性判断**:恶性还是良性?这种“非黑即白”的抉择,正是**逻辑回归(Logistic Regression)** 的战场&a…...
8k长序列建模,蛋白质语言模型Prot42仅利用目标蛋白序列即可生成高亲和力结合剂
蛋白质结合剂(如抗体、抑制肽)在疾病诊断、成像分析及靶向药物递送等关键场景中发挥着不可替代的作用。传统上,高特异性蛋白质结合剂的开发高度依赖噬菌体展示、定向进化等实验技术,但这类方法普遍面临资源消耗巨大、研发周期冗长…...
SpringBoot+uniapp 的 Champion 俱乐部微信小程序设计与实现,论文初版实现
摘要 本论文旨在设计并实现基于 SpringBoot 和 uniapp 的 Champion 俱乐部微信小程序,以满足俱乐部线上活动推广、会员管理、社交互动等需求。通过 SpringBoot 搭建后端服务,提供稳定高效的数据处理与业务逻辑支持;利用 uniapp 实现跨平台前…...
高危文件识别的常用算法:原理、应用与企业场景
高危文件识别的常用算法:原理、应用与企业场景 高危文件识别旨在检测可能导致安全威胁的文件,如包含恶意代码、敏感数据或欺诈内容的文档,在企业协同办公环境中(如Teams、Google Workspace)尤为重要。结合大模型技术&…...
反射获取方法和属性
Java反射获取方法 在Java中,反射(Reflection)是一种强大的机制,允许程序在运行时访问和操作类的内部属性和方法。通过反射,可以动态地创建对象、调用方法、改变属性值,这在很多Java框架中如Spring和Hiberna…...
DeepSeek 技术赋能无人农场协同作业:用 AI 重构农田管理 “神经网”
目录 一、引言二、DeepSeek 技术大揭秘2.1 核心架构解析2.2 关键技术剖析 三、智能农业无人农场协同作业现状3.1 发展现状概述3.2 协同作业模式介绍 四、DeepSeek 的 “农场奇妙游”4.1 数据处理与分析4.2 作物生长监测与预测4.3 病虫害防治4.4 农机协同作业调度 五、实际案例大…...
Device Mapper 机制
Device Mapper 机制详解 Device Mapper(简称 DM)是 Linux 内核中的一套通用块设备映射框架,为 LVM、加密磁盘、RAID 等提供底层支持。本文将详细介绍 Device Mapper 的原理、实现、内核配置、常用工具、操作测试流程,并配以详细的…...
均衡后的SNRSINR
本文主要摘自参考文献中的前两篇,相关文献中经常会出现MIMO检测后的SINR不过一直没有找到相关数学推到过程,其中文献[1]中给出了相关原理在此仅做记录。 1. 系统模型 复信道模型 n t n_t nt 根发送天线, n r n_r nr 根接收天线的 MIMO 系…...
力扣热题100 k个一组反转链表题解
题目: 代码: func reverseKGroup(head *ListNode, k int) *ListNode {cur : headfor i : 0; i < k; i {if cur nil {return head}cur cur.Next}newHead : reverse(head, cur)head.Next reverseKGroup(cur, k)return newHead }func reverse(start, end *ListNode) *ListN…...
