进程、线程、协程的认识
1、进程
1)操作系统资源分配的基本单位。
2)进程状态:阻塞、就绪和运行。
3)每个进程都有自己独立的进程地址空间。
4)一个进程崩溃了,不影响其他进程。
5)进程创建、切换和销毁等开销大。
6)进程间通信,效率低。
2、线程
1)操作系统调度的基本单位。
2)线程独有的资源,主要为了线程切换时,保留TCB(Thread Control Block,线程控制块)
2.1)线程id,线程在进程中的唯一标识。
2.2)寄存器,如函数调用栈的指针。
2.3)栈,如函数调用栈。
2.4)错误返回码
2.5)线程优先级,用于调度。
2.6)信号屏蔽码,每个线程关心的信号可能不一样。
3)同个进程的多个线程,共享进程地址空间。
4)主线程崩溃,同个进程的其他线程也会崩溃。
5)线程创建、切换和销毁等开销小(相对进程来说),线程切换要涉及到内核态。
6)线程间通信,因为共享进程地址空间,效率高很多,特别是在通信数据量大时更明显。
3. 协程(coroutine)
协程是一种轻量级的用户态线程,操作系统对协程无感知。实现的是协作式调度(非抢占式调度),即协程切换由当前协程控制,主动让出CPU(例如当前协程在等待异步网络IO时)。通常情况下,一个线程包含多个协程。
1、优点
1)协程切换的开销比线程切换小很多。原本需要线程数量越多的场景,用协程的性能优势就越明显。
可以参考:https://blog.csdn.net/weixin_30389003/article/details/96807467?utm_medium=distribute.pc_aggpage_search_result.none-task-blog-2~all~first_rank_v2~rank_v25-7-96807467.nonecase&utm_term=c++%E8%BF%9B%E7%A8%8B%20%E7%BA%BF%E7%A8%8B%E5%92%8C%E5%8D%8F%E7%A8%8B