进程是资源分配的基本单位,是一个程序的执行过程,程序是静态的,进程是动态的,它有着创建、就绪、运行、堵塞、结束的状态,还有就绪挂起、阻塞挂起的状态(这是因为内存中就绪队列和阻塞队列满了,需要将一些不常用的进程交换到磁盘,在操作系统中,因为是部分原则,因此会将部分页交换到磁盘,当需要用的时候才通过io swap回内存(页面置换),这期间又涉及到预读失效、缓存污染、lru、lfu、页调度算法)。每个进程都有自己对应的PCB(进程描述信息、进程控制和管理信息、资源分配清单、cpu相关信息),里面就是它的各种信息,包括分配的资源()
线程是cpu调度的基本单位,有自己独立的栈和寄存器。共享进程的代码段、数据段、文件资源、页表等。
线程被划分分内核线程和用户线程,而用户线程就是轻量级线程也就是协程。
为了使cpu时刻都在共作,提高它的使用率,因此出现了进程的概念,当一个进程堵塞时,cpu不会干等着,而是会通过操作系统进行进程间的调度,提高cpu的工作效率。然而进程创建时所需要的资源太多了,进程间切换花销太大,因此科学家想在进程中再做点事情,线程出来了,一个进程可以拥有多个线程,因此线程就是轻量级进程,同一个进程中的线程可以共享进程的页表、数据段等资源。每一个线程也会有唯一的一个TCB来表示自己,它等同于PCB也需要记录自己的工作信息,以用来进行工作的切换调度,因为线程可以共享进程中的某些资源(临界区),因此就会有多个线程同时竞争某一个资源的时候,这个时候需要信号量机制或者锁机制来同步资源情况。而在cpu调度线程的时候还是会有着内核态和用户态之间的切换,这也会导致一定的开销,这个时候。协程(用户态线程)出现了,协程的调度只会出现在用户态空间中,用户态不需要操作系统的干预,完全是由用户操作的,同时它也有自己的寄存器上下文和栈,一个线程也可以拥有多个协程。