zoukankan      html  css  js  c++  java
  • java并发编程的艺术

    线程上下文

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

    线程和速度

    为什么多线程会快

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

    什么时候多线程不会快

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

    减少上下文切换

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

    锁和死锁

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

    避免死锁

    • 避免一个线程获取多个锁
    • 保证每个锁只占有一个资源
    • 使用定时锁
    • 数据库连接,加解锁操作要在一个session里
  • 相关阅读:
    第一次团队作业
    第二次结对作业
    第一次结对作业
    制作简易的中文编译器
    第一次博客作业
    个人总结
    第三次个人作业
    第二次结对作业
    第一次结对作业
    第二次编程作业
  • 原文地址:https://www.cnblogs.com/enhe/p/12141681.html
Copyright © 2011-2022 走看看