BinaryTom

导航

java并发编程的艺术 - 第一章笔记

线程上下文

CPU通过调度算法(常用时间片轮转)来切换线程,线程上下文则是在切换过程中,用来保存线程的执行状态,可以理解为当前执行线程的快照。

线程和速度

为什么多线程会快

  • 串行变为并发执行
  • cpu的运算速度远远大于io速度,可以将部分io阻塞的时间用于计算其他任务

什么时候多线程不会快

  • 计算密集型任务,如果cpu一直保持高负荷,即使多线程也不会加快运算速度,而且会因为频繁切换上下文带来额外开销。
  • 资源受限:带宽、网络连接数等(可以考虑集群的方式解决)

减少上下文切换

  • 无锁并发,减少多线程竞争锁
  • CAS
  • 避免大量线程等待(少创建线程)
  • 协程(线程内调度,上下文在线程内处理,操作系统层面是一个内核态和用户态的m:n模型,一个轻量级进程(java线程)调度多个协程,避免频繁切换内核态和用户态的开销)

锁和死锁

  • 锁是为了占用资源
  • 死锁是两个或更多线程争抢资源导致的等待(互相等待对方解锁)

避免死锁

  • 避免一个线程获取多个锁
  • 保证每个锁只占有一个资源
  • 使用定时锁
  • 数据库连接,加解锁操作要在一个session里

posted on 2019-08-01 19:54  BinaryTom  阅读(187)  评论(0编辑  收藏  举报