进程:是操作系统资源分配的最小单位 例:IO资源,内存资源
线程:是进行资源调度的单位,是实在的一条执行指令
Java内存模型
线程共享区:方法区 堆区
线程私有区: 虚拟机栈 本地方法栈 程序计数器
进程与线程的关系:
对应关系:一个进程可以对应多个线程
健壮性:进程与进程相互隔离,一个进程崩溃不会影响其他进程
一个线程崩溃导致整个进程崩溃
进程的健壮性要比线程强
资源:创建意味着开辟内存空间,在同一个进程下的线程共享部分空间
开辟一个进程相比线程资源占用要多
Java进程,线程和操作系统的关系
| 进程 | 线程
java | runtime.exe | Thread |
---------------------------------------**
Linux | fork,vfork |pthread_create
所有语言编译 -> 1.指令 2.数据
总线 -> 1.控制总线 2.地址总线 3.数据总线
0X23452 -> 虚拟地址
虚拟地址和物理地址的映射问题
以x86体系的32位系统为例 一个虚拟地址空间大小: 2^32 = 内存4G
------------------------ 0x00000000
预留空间
------------------------ 0x08048000
.txt(指令) .rodata(常量区)
------------------------
.data .bss(数据段)
------------------------
.heap(堆)
------------------------
.stack(栈)
------------------------ 0xc0000000
kernel space(内核空间)
------------------------ 0xffffffff
用户空间 3G 内核空间 1G
内核空间进程共享,用户空间是隔离的 -> 进程之间是隔离的
进程通信 -通信方式
信号量,管道,消息队列
在内核空间开辟空间进行数据传递,一个进程写数据,其他进程也就可以看
内存共享(进程间)
a进程-》a虚拟内存空间 -》 物理内存空间
b进程-》b虚拟内存空间 -》 物理内存空间