- CPU从硬盘中读取程序到内存中,这个在内存中的可执行程序实例就叫做进程
- 一个程序若多次读取到内存中,则变成了多个独立的进程
- 硬盘中多个程序读取到内存时,也就创建了更多的进程
- 内存中任何一个地方都有相应的地址,方便访问
- 而在内存中的每个进程,自己内部都有一个虚拟独立的地址空间
- 在进程内就可以根据虚拟地址来访问
- 进程间怎么访问?
- 进程是程序执行的完整单位,进程间就需要进程间通信(IPC),这可能需要系统调用,访问会更慢
- 每个进程都以为自己独占着整个内存,不需要关心其他进程的实际位置,这样就把进程很好的分割开来
- 每个进程首先有加载的程序,通常只有一个程序计数器,记录当前程序执行的位置,会按照程序顺序计算
- 这里一个执行流就是一个线程
- 如果有多个线程,就需要多个程序计数器
- 每个线程会独自运行,除此之外,每个线程还寄存器、堆栈等程序运行时的状态信息
- 线程间共享的则有地址空间、全局变量、打开的文件信息等
- 线程是并行的最小单位
- 如果只有一个单核CPU,也就是每次只能执行一个线程,那就需要对每个线程轮流执行
- 每次单个计算的时间称为一个CPU时间片
- 多核CPU可以让多个线程真正的并行计算,不过线程数一般还是多于CPU核数,所以CPU时间片依旧存在
- 为了简化,CPU在内核中为每个线程提供各自的虚拟CPU,每个线程会认为自己是一直独占着CPU,它们就不需要考虑时间片轮转的问题了