进程:
对于操作系统来说,一个任务就是一个进程(process).进程是程序的基本执行实体.进程是资源分配的基本单位
每个进程相互独立,不影响主程序的稳定性,子进程崩溃没关系;
通过增加CPU,就可以容易扩充性能;
可以尽量减少线程加锁/解锁的影响,极大提高性能
进程有独立的地址空间
一个进程是无法访问另一个进程的变量和数据结构,如果想让一个进程访问另一个进程的资源,需要使用进程间通信,比如管道,文件,套接字等.
线程:
在一个任务中,需要运行多个子任务,我们把这些任务内的子进程称为'线程'. 线程是处理器调度的基本单位
所以说一个进程至少有一个线程.
线程是最小的执行单元,而进程至少由一个线程组成.
线程没有独立的地址空间,同一进程内多个线程共享其资源
一个进程可以拥有多个线程,每个线程使用其所属进程的栈空间,每个线程拥有自己的寄存器和栈,其他线程可以读写这些栈内存
区别
1地址和其他资源:进程间相互独立,同一进程的各线程间共享,某进程内的线程在其他进程内不可见.
2 通信:进程间通信IPC(管道,信号量,共享内存,消息队列),线程间可以直接独写进程数据段(如全局变量)来进程通信--需要进程同步和互斥手段的辅助,以保护程序的一致性.
3调度和切换:线程上下文切换比进程上下文切换快得多.
协程:协程是一种用户态的轻量级线程,协程的调度完全由用户控制.协程拥有自己的寄存器上下文和栈.协程调度切换时,将寄存器上下文和栈保存到其他地方,在切回来的时候,恢复先钱保存的寄存器上下文和栈,直接操作栈则基本没有内核切换的开销,可以不加锁的访问全局变量,所以上下文的切换非常快