您的位置:首页 > 编程语言 > Java开发

Java并发的一些概念

2018-02-24 18:13 246 查看

并行之争

    与串行相比,并行的实现异常复杂,程序难以阅读,更难以调试,把简单问题复杂化。但是在图像处理和服务端程序例外。
    1024 * 768 像素的图片,有78万多个像素,将所有的像素遍历一遍,要花不少时间。更何况图像处理涉及大量的矩阵计算。
    服务端程序需要承受很重的访问压力。

为什么用并行

性能(相对于串行);业务模型。

几个概念

活锁:两个线程互相让出资源。

并发的分类:阻塞、无饥饿、无障碍、无锁、无等待。
无饥饿:公平的执行线程。

无障碍:用CAS更新数据是一种方案。

无锁:CAS即无锁。

无等待:读写锁。

提高效率

将串行程序改成并发,效率提高多少,有两个定律:Amdahl,Gustafson。两者是对同一问题的不同角度的考虑。

Amdahl 

Amdahl Tn = T1(F + I/n(1-F)) T:时间 n:处理器个数:CPU数量越多、串行化比重越低,优化效果越好。如果CPU数量趋于无穷,那么加速比与系统的串行化率成反比,如果系统中必须有50%的代码串行执行,那么系统的最大加速比为2。

Gustafson

Gustafson S(n) = n - F(n - 1):如果串行化比例很小,并行化比例很大,那么加速比就是处理器个数。

JMM

JMM技术点都围绕着多线程的原子性可见性有序性(指令重排序)建立的。
为什么要指令重排?是减少流水线中断的一种技术,可提高CPU性能。

《流水线与指令重排序》
《JMM 重排序、内存屏障、volatile语义、AQS、final语义》
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: