一.背景知识

作者: 蜗牛1991 | 来源:发表于2017-09-15 16:29 被阅读0次

一.CPU与线程运行方式

image.png
  • CPU主要工作就是向内存要一条指令, 执行这个指令, 如果是个跳转指令的话,我就问内存要跳转的目标地址的那一条指令。当然为了提高效率,根据 时间局部性和空间局部性原理,将部分程序缓存在cpu,每次读写指令和数据, 都问cpu缓存要, 缓存没有从内存加载。

  • 程序从硬盘加载到内存是根据段表与页表存储的,不同的程序分配不同的段(一块内存空间),一个程序分配一个进程。


    image.png
  • 上下文切换:正在进行的程序随时可以被打断(CPU抢占机制),退出当前进程时,CPU保存当前进程调度状态, 回到内存里歇着去,下一次运行时恢复。

  • 线程:把一个进程当成一个资源的容器, 让里边运行几个轻量级的进程, 就叫线程吧, 这些线程共享进程的所有资源, 例如地址空间,全局变量,文件资源等等。

image.png
参考:码农翻身

二.java内存模型

  • Java内存模型(Java Memory Model,JMM) 是对Java并发编程中线程与内存的关系的定义,即线程间的共享变量存储在主内存(Main Memory) 中,每个线程都有一个私有的本地工作内存(Local Memory)(对CPU寄存器和高速缓存的抽象)
    image.png
  • 一致性的问题。目前处理一致性问题主要有共享内存和消息通信这两个大的方式,每种方式里面又根据不同的需求有不同的实现方式。Java内存模型处理的就是单机器多CPU场景下的内存一致性问题。如果程序是正确同步的,程序的执行将具有顺序一致性(sequentially consistent)–即程序的执行结果与该程序在顺序一致性内存模型中的执行结果相同。这里的同步是指广义上的同步,包括对常用同步原语(lock,volatile和final)的正确使用。在JMM中,如果一个操作执行的结果需要对另一个操作可见,那么这两个操作之间必须要存在happens-before关系。
  • 内存可见性(数据同步):Java提供了volatile关键字来保证可见性。当一个共享变量被volatile修饰时,它会保证线程工作内存中修改的值会立即被更新到主内存中,其他线程也会将主内存中的新值同步至工作内存,需要注意的是volatile并不能保证原子性。
  • 加锁就是就是取消进程的某一线程的行动权

参考:
1.聊聊高并发(三十四)Java内存模型那些事(二)理解CPU高速缓存的工作原理
2.查看《浅析Java并发编程》系列文章目录
3.深入理解java内存模型系列文章

相关文章

  • 一.背景知识

    一.CPU与线程运行方式 CPU主要工作就是向内存要一条指令, 执行这个指令, 如果是个跳转指令的话,我就问内存要...

  • 背景知识

    背景知识。人们以为事实性知识不重要,重要的是归纳/分析/独立思考,但事实相反,事实性知识先于技能,也就是说先学习了...

  • 知识背景

    1,李翔知识内参今天讲到金庸先生,说他的作品在很多场景下构成了共同的知识背景,这真是极高的评价。 2,那么金庸先生...

  • 背景知识

    什么是背景知识? 举个例子,甲告诉我们同样一句话,你听得懂,但我不理解。这就是我跟你比起来缺乏相关的背景知识,我没...

  • 一.NIO背景知识

    一.虚拟内存 MMU:它是中央处理器(CPU)中用来管理虚拟存储器、物理存储器的控制线路,同时也负责虚拟地址映射为...

  • (一)Android背景知识

    本文为Android的背景知识相关知识整理,具体参考了 《Android群英传》第一章 Android体系与系统架...

  • 【读红宝书(一)】背景知识

    过去十年引起广泛关注的数据模型是 MapReduce,但 MapReduce 不是一种具有普适性的架构。相反,Ma...

  • 新冠背景知识(一)

    COVID-19 和SARS-COV2 SARS-COV2:病毒名称;严重急性呼吸综合征冠状病毒2(SARS-Co...

  • SSH背景知识

    ssh主要是用RSA进行加密的,RSA是非对称的,什么是非对称,就是你加密的密钥和解密的密钥用的不是同一个密钥,用...

  • 缓冲区溢出

    知识背景 栈溢出及防护 堆溢出及防护 一、知识背景 关于栈溢出的知识背景 1. 典型操作系统的内存布局: 分段的意...

网友评论

    本文标题:一.背景知识

    本文链接:https://www.haomeiwen.com/subject/taocsxtx.html