本质⽤户空间下的线程
拥有⾃⼰的寄存器上下⽂和栈
切换情况:先将寄存器上下⽂和栈保存,等切换回来的时候再进⾏恢复
2、原因
⼀是节省 CPU,避免系统内核级的线程频繁切换,造成的 CPU 资源浪费。⽽协程是⽤户态的线程,⽤户可以⾃⾏
控制协程的创建与销毁,极⼤程度避免了系统级线程上下⽂切换造成的资源浪费。
⼆是节约内存,在 64 位的 Linux 中,⼀个线程需要分配 8MB 栈内存和 64MB 堆内存,系统内存的制约⽆法开启
更多线程实现⾼并发。但是协程他的大小只有几十kb ,可以轻松有⼗⼏万协程,这是线程⽆法⽐拟的。
三是稳定性,前⾯提到线程之间通过内存来共享数据,这也导致了⼀个问题,任何⼀个线程出错时,进程中的所有
线程都会跟着⼀起崩溃。
四是开发效率,使⽤协程在开发程序之中,可以很⽅便的将⼀些耗时的 IO 操作异步化,例如写⽂件、耗时 IO 请求
等。