文章目录
进程与线程
进程与线程都分为五个阶段,创建、就绪、运行、阻塞和终止
故事的开始
内存的每一个空间都有地址,当需要运行程序时,操作系统调用CPU把程序从硬盘读入内存,创建一个可执行的程序实例即进程,程序占用的内存地址被组织成具有独立虚拟地址的内存空间,在进程内通过虚拟地址可以快速访问每一块内存,通过跨进程通信技术也能实现不同进程间的通信但是会更慢。每个进程通常有一个程序计数器记录当前程序的执行的位置,还会分配寄存器和堆栈顺序执行,它们共同构成的执行流是线程,一个进程内可以有多个线程,进程内的虚拟地址和全局变量等是全部线程共享的,对于一个CPU核心在一个时间片(和晶振频率正相关)内只能执行一个线程,因此一个进程中的多个线程是轮流执行,等待CPU执行时线程就是处于就绪阶段,CPU执行中线程就是处于运行阶段,如果此时执行的程序请求访问硬盘耗时将远超一个时间片(IO等待)于是CPU就会陷入空转此时线程就是处于阻塞阶段,紧接着CPU就会转而执行其它就绪的线程直到阻塞的线程访问硬盘结束继续执行,如果具有多个CPU核心确实可以实现多个线程同时并行计算
每个进程都有独立的内存空间(进程上下文),进程切换开销大,一个进程可以包含 1 到 n 个线程,一进程的各个线程不仅有自己的寄存器和堆栈还共享代虚拟地址和全局变量,线程切换开销小,相比于进程细粒度更高
故事的结束
进程是操作系统资源分配的最小单位,线程是CPU调度的最小单位
多进程与多线程
多进程指操作系统能同时运行多个任务(程序),多线程指同一程序中有多个顺序流在执行(功能)
多线程可以提高程序运行速度,其本质是提高对CPU的利用率,程序阻塞等待时充分利用CPU减少CPU空转,如果部分线程发生阻塞,另一部分线程则仍能继续使用CPU,因此程序中没有上下文关系的片段可以使用不同线程分别执行从而提高程序运行速度
多线程并不一定能提高程序运行速度,盲目创建大量线程来并发反而会降低程序运行速度。因为在多个线程进行切换执行的时候会带来开销。其中有线程切换、CPU调度线程、线程创建和终止等开销。其中主要是线程切换时保存上一个线程现场和载入下一个线程现场的操作,即上下文切换
以上都可以通过多进程技术实现,但是创建与终止进程(分配和释放独立的内存空间),进程间通信与切换等开销都会大的多