1.基础知识
1.1 进程-->线程-->协程
进程:
1.系统资源分配的最小单位
2.由系统内核调度,处于内核态
线程:
1.系统调度(分配cpu时间片)的最小单位
2.一个进程内的线程共享资源
3.系统内核调度,处于内核态
协程:
1.一个线程可分为多个协程
2.协程处于用户态,由用户进行调度控制
3.因为处于用户态,同一个线程内的协程一定是在一个cpu上串行执行
1.2 协程的上下文
执行过程中的寄存器、变量、地址等信息
1.3 对称协程和非对称协程
对称协程:控制权我想给谁就给谁。协程可以不受限制地将控制权交给任何其他协程。任何⼀个协程都是相互独⽴且平等的,调度权可以在
任意协程之间转移。
⾮对称协程:控制权只能交还给给我控制权的那个协程。是指协程之间存在类似堆栈的调⽤⽅-被调⽤⽅关系。协程出让调度权的⽬标只能是它的调⽤者。
1.4 有栈协程和无栈协程
关键点:当协程切换时,有没有独⽴的执⾏栈来保存协程的上下⽂信息
无栈协程将上下文保存在堆中,协程切换时,使⽤状态机来切换,就不⽤切换对应的上
下⽂了,因为都在堆⾥的。⽐有栈协程都要轻量许多。
1.4.1 独⽴栈与共享栈
关键点:是每个协程有一个独立栈还是所有协程共享一个栈
共享栈耗时;独立栈浪费内存空间,容易溢出(栈不容易扩展,给少了溢出,给多了浪费)
1.5 协程的优缺点
优点:
1.提⾼资源利⽤率,提⾼程序并发性能。协程允许开发者编写异步代码,实现⾮阻塞的并发操作,通过在适当的
时候挂起和恢复协程,可以有效地管理多个任务的执⾏,提⾼程序的并发性能。与线程相⽐,协程是轻量级
的,它们的创建和上下⽂切换开销较⼩,可以同时执⾏⼤量的协程,⽽不会导致系统负载过重,可以在单线程
下实现异步,使程序不存在阻塞阶段,充分利⽤cpu资源。
2.简化异步编程逻辑。使⽤协程可以简化并发编程的复杂性,通过使⽤适当的协程库或语⾔特性,可以避免显式
的线程同步、锁和互斥量等并发编程的常⻅问题,⽤同步的思想就可以编写成异步的程序。
缺点:
1.难以调试、占⽤更多内存
2.⽆法利⽤多核资源。线程才是系统调度的基本单位,单线程下的多协程本质上还是串⾏执⾏的,只能⽤到单核
计算资源,所以协程往往要与多线程、多进程⼀起使⽤。