java多线程与高并发的快速入门指南

并行世界的入门指南

并行计算主要适用于:图像处理+服务端编程(主要是java)。
性能翻倍的摩尔定律失效,软件开发为硬件设计者的无计可施所采取的多核cpu策略埋单。
同步/异步:同步需要等待调用结束才可以执行下一步,异步无需等待,类似消息,发出去了就去干别的事情了。
并发/并行:并发偏重多任务 交替执行,并行是真正意义上的 同时执行(必须多核CPU,因为一个CPU一次只能执行一条指令,操作系统只能不停的切换任务来并发)。
临界区:公共资源和共享数据,不可以被多线程同时占用。
阻塞和非阻塞:阻塞是线程因等待资源而挂起。非阻塞反之。
死锁、饥饿、活锁:多线程的活跃性问题。死锁是都占着资源死不撒手(最糟糕),饥渴是弱肉强食的不同优先级,活锁是都冲突时都谦让导致谁都拿不到。
并发级别:阻塞(synchronized/重入锁),无饥饿(公平和非公平锁),无障碍(最弱,冲突则回滚,实现策略是“一致性标记”),无锁(至少一个线程会ok,可能会出现类似饥饿的无穷循环),无等待(所有的线程都在有限步内完成,对循环次数的不同分为有界无等待和线程数无关的无等待;典型的例子有RCU,即Read-Copy-Update)。
并行的两个定律:加速比Amdahl、加速比Guwtafson。
加速比Amdahl = 优化前系统耗时/优化后系统耗时 = 1/(串行的比例+(1-串行的比例)/处理器的个数)
加速比Guwtafson=优化前系统耗时/优化后系统耗时=处理器个数-串行比例*(处理器个数-1)
JMM(java的内存模型)的关键技术都是围绕多线程的原子性、可见性和有序性来建立的。
指令不能重排的Happen-Before规则,都是为了不破坏原有的语义结构。



  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值