并发编程
殷素素
程序媛咋了????
展开
-
并发编程的挑战
并发编程的目的是为了让程序运行的更快,但是由于上下文切换、死锁等问题,线程数越多并不一定越好。上下文切换时间片:时间片是CPU分配给各个线程的时间,时间片一般是几十毫秒上下文切换:CPU通过时间片分配算法来循环执行任务,当钱任务执行一个时间片后会切换到下一个任务。但是在切换前会保存上一个任务的状态,以便下次切换回这个任务时,可以再加载这个任务的状态。所以从保存到再加载的过程就是一次上下文切换...原创 2019-07-28 19:56:18 · 165 阅读 · 0 评论 -
volatile和synchronized底层实现原理
相关的CPU术语术语英文单词术语描述内存屏障memory barriers是一组处理器指令,用于实现对内存操作的顺序限制缓冲行cache line缓存中可以分配的最小存储单位。处理器填写缓存线时会加载整个缓存线,需要使用多个主内存读周期原子操作atomic operation不可中断的一个或一系列操作缓存行填充cache line fill...原创 2019-07-28 19:58:16 · 1934 阅读 · 1 评论 -
原子操作的实现原理
原子(atomic):不能被进一步分割的最小粒子原子操作:不可被中断的一个或一系列操作。CPU术语术语名词英文解释缓存行Cache line缓存的最小操作单位比较并交换Compare and SwapCAS操作需要输入两个数值,一个旧值(期望操作前的值)和一个新值,在操作期间西安比较旧值有没有发生变化,如果没有发生变化,才交换成新值,发生变化则不交换...原创 2019-07-28 19:58:51 · 597 阅读 · 0 评论 -
Java内存模型基础
并发编程模型的两个关键问题在编发编程里,需要处理的两个关键性问题:线程之间如何通信、线程之间如何同步。通信是指宣称之间以何种机制来交换信息。在命令式编程中,线程之间的通信机制有两种:共享内存和消息传递。在共享内存的模型里,线程之间共享程序的公共状态,通过写-读内存中的公共状态进行隐式通信。在消息传递的并发模型里,线程之间必须通过发送消息来显式进行通信。同步是指程序中用于控制不同线程间操作发生...原创 2019-07-28 20:00:59 · 287 阅读 · 0 评论 -
锁的内存语义
锁的释放-获取建立的hanppens-before关系锁是Java并发编程中最重要的同步机制。锁除了让临界区互斥执行外,还可以让释放锁的线程想获取同一个锁的线程发送消息。锁的释放和获取的内存语义当线程释放锁时,JMM会把该线程对应的本地内存中的共享变量刷新到主内存中。当线程获取锁是,JMM会把该线程对应的本地内存置为无效。从而使得被监视器保护的临界区代码必须从主内存中读取。锁和volat...原创 2019-07-28 20:02:10 · 295 阅读 · 0 评论 -
final域的内存语义
与volatile和锁相比,对final域的读和写更像是普通变量的访问final域的重排序规则对final域,编译器和处理器要遵守两个重排序规则在构造函数内对一个final域的写入,与随后把这个被构造对象引用的赋值给一个引用变量,这两个操作之间不能重排序。初次读一个包含final域的对象的引用,与随后初次读这个final域,这两个操作之间不能重排序。写final域的重排序规则写fi...原创 2019-07-28 20:02:45 · 267 阅读 · 0 评论