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

【学习笔记】Java并发编程的艺术——第1章 并发编程的挑战

第1章 并发编程的挑战

1.1 上下文切换

即使是单核处理器也支持多线程执行代码,CPU给每个线程分配CPU时间片实现多线程,而每个时间片一般是几十毫秒,所以多个线程感觉是同时执行的
但同一个核切换线程执行时会保存运行状态,以便下次切回来后读取运行,所以有上下文切换

1.1.1 多线程一定快吗?

不一定,线程有创建和上下文切换的开销

1.1.2 测试上下文切换次数和时长

略P3

1.1.3 如何减少上下文切换

1>无锁并发编程
当多线程竞争锁时,会引起上下文切换,所以多线程处理数据时,可以避免使用锁,如:分段处理,不同线程处理不同段上的数据
2>CAS算法:Java的Atomic包使用CAS算法来更新数据,而不需要加锁。
3>使用最少线程
避免创建不需要的线程
4>协程:
在单线程里实现多任务的调度,并在单线程里维持单个任务间的切换

1.1.4 减少上下文切换实战

P4空线程多了会影响上下文切换

1.2 死锁

1>排查:查看dump文件中堵塞状态的线程
2>如何避免线程死锁
①避免一个线程同时获取多个锁
②避免一个线程在锁内占用多个资源
③尝试使用定时锁,使用Lock.tryLock(timeout)替代内部锁

1.3 资源限制的挑战

1>硬件与软件资源会限制多线程效率,如带宽为2Mb/s,而下载速度为1Mb/s,开10个线程也不会编程10Mb/s,最多开两个
2>CPU利用率100%时,也应该考虑减少运算线程
3>软件资源一般为连接数,线程应与可拿到的连接数相关
4>内存使用过多会oom,此时也必须减少工作线程

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

相关文章:

  • Python打卡Day30 模块和库的导入
  • 12:java学习笔记:多维数组1
  • 如何分析Linux内存性能问题
  • 深度学习(鱼书)day09--与学习相关的技巧(前三节)
  • 2025牛客暑期多校训练营1(G,E,L,K,I)
  • 力扣 hot100 Day63
  • 使用 BERT 的 NSP 实现语义感知切片 —— 提升 RAG 系统的检索质量
  • Java试题-选择题(6)
  • 滚珠花键在汽车制造中有哪些高要求?
  • 记录一次Spring Cloud Gateway配置的跨域处理:解决 ‘Access-Control-Allow-Origin‘ 头包含多个值的问题
  • JavaScript将String转为base64 笔记250802
  • GCC(GNU Compiler Collection)与人工智能实例
  • 【前端:Html】--1.1.基础语法
  • [Linux入门] Ubuntu 系统中 iptables 的配置与使用
  • 公共卫生场景下漏检率↓76%:陌讯动态特征融合算法在口罩识别中的实战解析
  • GaussDB having 的用法
  • 适 配 器 模 式
  • 电力系统分析笔记:发电机与变压器的数学建模与运行状态详解
  • SPI通信中CS片选的两种实现方案:硬件片选与软件片选
  • Anthropic:跨越生产效能拐点的AI增长飞轮
  • Munge 安全认证和授权服务的工作原理,以及与 Slurm 的配合
  • 交互 Codeforces Round 1040 Interactive RBS
  • 深入 Go 底层原理(十一):Go 的反射(Reflection)机制
  • 基于深度学习的医学图像分析:使用GAN实现医学图像增强
  • SpringBoot 启动富文本文字更改
  • 基于 LightGBM 的二手车价格预测
  • 一种基于入侵杂草优化算法(IWO)的聚类算法,并与K-Means、高斯混合模型(GMM)进行对比,Matlab
  • 用键盘快速移动Word和WPS文字中的选中段落
  • 【笔试真题】2024秋招京东后端开发岗位-第一批笔试
  • 数据链路层、NAT、代理服务、内网穿透