进程、线程和协程
进程:进程就是应用程序的启动实例,比如我们打开一个游戏、运行一个软件,就是开启了一个进程。进程拥有代码和打开的文件资源、数据资源、独立的内存空间。
线程:线程从属于进程,是程序的实际执行者。一个进程至少包含一个线程,也可以拥有更多的线程,线程拥有自己的栈空间。
协程:协程的出现是为了解决进程和线程存在的问题的。使用多进程和多线程往往效率往往都不高(多线程比多进程效率高),因为在同步时会不可避免地存在以下操作:
- 加锁
- 进程、线程状态地切换
- 进程、线程上下文地切换
这些都是比较消耗性能地操作,此时就出现了协程地概念。协程是一种比线程更加轻量级地存在,正如一个进程可以拥有多个线程,一个线程也可以拥有多个协程。
协程最大的特点是完全由用户控制,因此就不需要频繁的进行用户态和内核态的切换,大大增高了运行效率。
进程、线程、协程的区别
效率排序(由小到大):进程 线程 协程
包含关系:一个进程可以有多个线程、一个线程可以有多个协程
一个协程从属于一个线程、一个线程从属于一个进程
分布式:进程适用于多核、多机;线程适用于多核
稳定性:进程稳定性高于线程,一个进程的死亡不会影响到其他进程,而一个线程的死亡会导致整个进程的死亡
创建、销毁效率:进程的创建销毁比线程复杂
调试难度:线程的调试难度大于进程