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

【学习笔记】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.xdnf.cn/news/16983.html

相关文章:

  • 前端开发(HTML,CSS,VUE,JS)从入门到精通!第三天(JavaScript)
  • Maven - 并行安全无重复打包构建原理揭秘
  • sqli-labs通关笔记-第28a关GET字符注入(关键字过滤绕过 手注法)
  • 如何设置主机IP地址
  • 用纳米AI一键生成Python屏幕监控软件
  • Python编程基础与实践:Python循环结构基础
  • 【图像处理基石】用Python实现基础滤镜效果
  • QPainter::CompositionMode解析
  • 智能学号抽取系统V5.6.4重磅发布
  • MyBatis 批量操作 XML 实现方式
  • 大模型(五)MOSS-TTSD学习
  • Windows 环境 psql 客户端连接数据库超慢问题
  • Mac电脑安装HomeBrew
  • GitHub 趋势日报 (2025年08月01日)
  • 【转】大模型安全治理的现状与展望
  • 【Leetcode】2561. 重排水果
  • Paper Reading《TrafficFormer: An Efficient Pre-trained Model for Traffic Data》
  • 【Leetcode hot 100】49.字母异位词分组
  • Windows中使用Qwen模型:VSCode+Cline
  • ABP VNext + NATS JetStream:高性能事件流处理
  • 【智能体cooragent】不同的单智能体调用的大模型的推理的输入与输出
  • flutter分享到支付宝
  • 模拟激光相机工作站版本6.0 5.2.32 6.0.44 6.031 5.2.20
  • LeetCode 每日一题 2025/7/28-2025/8/3
  • gcc-arm-none-eabi安装后,找不到libgcc.a的拉置
  • Java基础暑假每日一练
  • 集成电路学习:什么是CMSIS微控制器软件接口标准
  • Json Jsoncpp
  • sqli-labs:Less-20关卡详细解析
  • Gossip 协议