并发编程
文章平均质量分 94
zhangyingchengqi
学无止境。
展开
-
并发编程(三) - 重排序,happens-before原则,顺序一致性
重排序是指编译器和处理器为了优化程序性能而对指令序列进行重新排序的一种手段。上一篇文章中已经介绍了从Java源代码到最终实际执行的指令序列,会分别经历下面3种重排序:1属于编译器重排序,2和3属于处理器重排序。 这些重排序可能会导致多线程程序出现内存可见性问题。在单线程程序中,对存在控制依赖的操作重排序,不会改变执行结果(这也是as-if-serial语义允许对存在控制依赖的操作做重排序的原因);但在多线程程序中,对存在控制依赖的操作重排序,可能会改变程序的执行结果。1.数据依...原创 2021-02-08 18:30:13 · 791 阅读 · 0 评论 -
并发编程(二) - JMM(java内存模型)
java线程间的通信对程序员完全透明,内存可见性问题很容易困扰Java程序员.1. 并发编程的关键问题在并发编程中,需要处理两个关键问题: 线程之间如何通信及线程之间如何同步? 线程之间通信机制有两种: 共享内存、消息传递。1.1.通信是指线程之间以何种机制来交换信息1.1.1共享内存的通信机制在共享内存的并发模型里, 线程之间共享程序的公共状态,通过写-读内存中的公共状态进行隐式通信。1.1.2 消息传递的通信机制在消息传递的并发模型里,线程之间没用公共状态,线程之间...原创 2021-01-17 13:06:57 · 505 阅读 · 1 评论 -
并发编程问题
并发编程的目的是为了让程序运行得更快,但并不是启动更多的线程就能让程序最大限度并发执行。因为这里涉及到上下文切换问题,死锁问题,及受限于硬件和软件的资源限制问题。1. 上下文切换 即使是单核处理器也支持多线程执行代码,CPU通过给每个线程分配CPU时间片来实现这个机制。时间片是CPU分配给各个线程的时间,因为时间片非常短,所以CPU通过不停地切换线程执行,让我们感觉多个线程是同时执行的,时间片一般是几十毫秒(ms). CPU通过时间片分配算法来循环执行任务...原创 2021-01-11 16:37:32 · 443 阅读 · 0 评论