進程:是操作系統資源分配的最小單位 例: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虛擬內存空間 -》 物理內存空間