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