天天看点

Java内存模型简述进程间的通信方式内存间的交互操作

进程间的通信方式

进程是操作系统资源分配最小单位,而线程是操作系统调度的最小单位,在操作系统,或者应用程序运行的时候,多个进程之间或线程之间总是要通信的,而这种通信的方式有很多种,接下来总结几种常用的:

1:管道:

  1. 它是半双工的(即只能在一个方向上流动),具有固定的读和写端
  2. 它只能用于具有亲缘关系的进程之间的通信(父子进程或者这兄弟进程)
  3. 它可以看成是一中特殊的文件,对于它的读写也可以使用普通的read,write等函数,但是它不是普通文件,并不属于其他任何文件系统,并且只在于内存中.

FIFO

也成为命管道,他是一种文件类型

1. FIFO可以在无关进程之间交换数据

2. FIFO有路径名与之相关联,它以一种特殊设备文件形式存在与文件系统中

内存间的交互操作

关于主内存和工作内存之间具体的交互协议,即一个变量如何从工作内存同步到主内存,又如何从主内存拷贝到工作内存.Java内存模型定义了一下8中操作来完成,虚拟机实现是必须保证下面提及的每一种操作都是原子的,不可再分的.

1. lock(作用与主内存变量,把一个变量标识为一条线程独占的状态)

2. unlock(作用与主内存,把一个处于锁定的变量释放出来,没有加锁的变量才能被其他线程锁定)

3. read(作用与主内存变量,把一个变量的值从主内存传输到工作内存中,以便之后的load操作使用)

4. load(作用与工作内存,read出来的变量的值放入工作内存的变量副本中)

5. use(作用于工作内存变量,把工作内存中一个变量的值传递给执行引擎,当虚拟机遇到一个需要使用变量值的字节码指令的时候,将会执行此操作)

6. assign(作用与工作内存,它把一个从执行引擎 接受到的值赋值给工作内存中的变量,每当虚拟机遇到一个给变量赋值的字节码指令时会执行此操作)

7. store(作用与工作内存,将一个工作内存中变量的值传给主内存,方便执行后续的write操作)

8. write(作用于主内存,将store操作传递过来变量的值放在主内存的变量中)