zoukankan      html  css  js  c++  java
  • 物理机内存模型与java内存模型

    多线程缓存一致性问题

    程序在运行过程中,会将运算需要的数据从主存复制一份到CPU的高速缓存当中,那么CPU进行计算时就可以直接从它的高速缓存读取数据和向其中写入数据,当运算结束之后,再将高速缓存中的数据刷新到主存当中

    在单线程的情况下,这没有任何问题,但在多核CPU中(多线程),每条线程可能运行于不同的CPU中,因此每个线程运行时有自己的高速缓存,可能出现如下情况:

    执行:i = i + 1;

    如果同时有2个线程执行这段代码,初始时i的值为0,两个线程分别读取i的值存入各自所在的CPU的高速缓存当中,

    线程1进行加1操作,然后把i的最新值1写入到内存。

    此时线程2的高速缓存当中i的值还是0,进行加1操作之后,i的值为1,然后线程2把i的值写入内存。

    结果i的值为1。

    这就是缓存一致性问题。通常称这种被多个线程访问的变量为共享变量。

    解决方案

    1)总线加锁

    2)缓存一致性协议

    -------------------------------------------------------------------------------

    物理机内存模型

    ---------------------------------------------------------------------------------

    java内存模型

    与物理机内存类似

    其中:主存类似于前面说的物理内存,每个线程都有自己的工作内存(类似于前面的高速缓存)。

  • 相关阅读:
    Tensorflow结点打包和依赖控制
    理解sklearn.feature.text中的CountVectorizer和TfidfVectorizer
    scipy稀疏矩阵
    最佳阈值划分问题
    hihocoder217周 树形DP
    linux免密码登录
    我说
    Linux查看GPU使用情况
    Java交替打印两个字符串
    2018摩拜算法工程师笔试题
  • 原文地址:https://www.cnblogs.com/yanze/p/9837109.html
Copyright © 2011-2022 走看看