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

并发编程理论基础——合适的线程数量和安全的局部变量(十)

多线程的提升方向

  1. 主要方向在于优化算法和将硬件的性能发挥到极致
  2. 想要发挥出更多的硬件性能,最主要的就是提升I/O的利用率和CPU的利用率以及综合利用率
  3. 操作系统已经解决了磁盘和网卡的利用率问题,利用中断机制还能避免 CPU 轮询 I/O 状态,也提升了 CPU 的利用率。但是操作系统解决硬件利用率问题的对象往往是单一的硬件设备,而我们的并发程序,往往需要 CPU 和 I/O 设备相互配合工作,也就是说,我们还需要解决 CPU 和 I/O 设备综合利用率的问题。
  4. 如果 CPU 和 I/O 设备的利用率都很低,那么可以尝试通过增加线程来提高吞吐量。

创建多少线程数合适

  1. 我们的程序一般都是CPU和I/O操作交互执行的,其中I/O设备的速度要比CPU慢的多,所以I/O操作时间也要比CPU操作时间长的多,这种情况被称为I/O密集型计算
    • 最佳的线程数是与程序中 CPU 计算和 I/O 操作的耗时比相关的
    • (单核)最佳线程数 =1 +(I/O 耗时 / CPU 耗时)
    • (多核)最佳线程数 =CPU 核数 * [ 1 +(I/O 耗时 / CPU 耗时)]
  2. 还有一个与之相对的被称为CPU密集型计算,大部分场景下都是纯CPU计算
    • 对于 CPU 密集型的计算场景,理论上“线程的数量 =CPU 核数”就是最合适的
    • 不过在工程上,线程的数量一般会设置为“CPU 核数 +1”,这样的话,当线程因为偶尔的内存页失效或其他原因导致阻塞时,这个额外的线程可以顶上,从而保证 CPU 的利用率。

注意:工作中都是按照逻辑核数来的,理论值和经验值仅供参考,实际上还是要靠压测

方法是怎么执行的

当你调用一个方法时,CPU 要先找到方法的地址,然后跳转到这个地址去执行代码,最后 CPU 执行完方法后返回。

CPU 去哪里找到调用方法的参数和返回地址以及局部变量

  1. 通过 CPU 的堆栈寄存器,CPU支持的栈结构被称为调用栈
  2. 每个方法在调用栈里都有自己的独立空间,称为栈帧,每个栈帧里都有对应方法需要的参数和返回地址以及局部变量。当调用方法时,会创建新的栈帧,并压入调用栈;当方法返回时,对应的栈帧就会被自动弹出。也就是说,栈帧和方法是同生共死的。
  3. 调用栈和线程之间是什么关系:每个线程都有自己独立的调用栈
  4. 局部变量的作用域是方法内部,也就是说当方法执行完,局部变量就没用了

Java 方法里面的局部变量是否存在并发问题

没有。因为每个线程都有自己的调用栈,局部变量保存在线程各自的调用栈里面,不会共享,所以自然也就没有并发问题。

 

 

http://www.lryc.cn/news/383513.html

相关文章:

  • Python使用抽象工厂模式和策略模式的组合实现生成指定长度的随机数
  • python-17-零基础自学python-
  • Web应用和Tomcat的集成鉴权1-BasicAuthentication
  • 解决Linux下Java应用因内存不足而崩溃的问题
  • ardupilot开发 --- 视觉伺服 篇
  • KVM配置嵌套虚拟化
  • Springboot应用的信创适配-补充
  • 制图工具(14)导出图层字段属性信息表
  • 代码随想录——买股票的最佳时机Ⅱ(Leecode122)
  • 使用Servlet开发javaweb,请求常见错误详解及其解决办法【404、405、500】
  • 数据库管理-第210期 HaloDB-Oracle兼容性测试02(20240622)
  • SpringBoot实现定时任务的动态停止和更新
  • 【threejs】火焰特效制作
  • 五原则四实践,REST API安全性请谨记
  • 1390:食物链【NOI2001】
  • ICMAN液位检测——WS003B管道检测模组
  • YOLOv10使用教程及导读
  • AIGC 在前端流式获取内容SSE
  • 深度解析安全阀检测技术:方法与挑战
  • 网络安全--安全设备(一)Dos
  • <电力行业> - 《第3课:国家电网公司100条名词解释》
  • “论数据访问层设计技术及其应用”写作框架,系统架构设计师
  • Docker部署前端,动态配置后端地址
  • k8s强制删除一个 Pod
  • docker的安装配置及使用
  • 初阶 《操作符详解》 10. 逗号表达式
  • 【区分vue2和vue3下的element UI Loading 加载组件,分别详细介绍属性,事件,方法如何使用,并举例】
  • 数据结构:栈(stack)详解 c++信息学奥赛基础知识讲解
  • 电商返利系统的高并发处理与性能优化
  • NPM 常用命令