【Go 精选】协程是什么?

2021-09-26  本文已影响0人  熊本极客

1 为什么需要协程

案例:系统闲时有 10 人同时在线,高峰时有 10000 人同时在线。如果打算启动 10000 个线程来处理任务,由于每个线程至少会占用 4M 的内存空间,10000 个线程会消耗 39G 内存,但是服务器的内存配置只有区区 8G。
解决方案:① 增加服务器;② 提高代码效率

增长的线程.png

如何提高代码效率
提高代码效率的关键问题:①系统线程占用非常多的内存空间;②线程切换会占用大量的系统时间

线程切换.png

协程可以解决上述 2 个多线程问题。协程没有增加线程数量,只是在线程的基础上通过分时复用方式运行多个协程

协程切换.png

3 协程是什么

3.1 多线程简介

CPU拥有多个核心线程,实现多个子任务(用户线程)同时执行。

多线程.png

问题:内核级线程和用户级线程的区别
解答:a 图表示用户级线程,如果进程中某个线程发生阻塞,那么整个进程中的线程都无法执行。b 图表示内核级线程,进程中的线程会直接调用内核级线程,即真正意义的多线程。

内核线程.png

3.2 协程

协程是抽象出来的线程,并在用户空间进行协程管理,减少内核的压力。

协程.png

多个协程可以在同一个线程上运行。

协程工作的时间轴.png
上一篇 下一篇

猜你喜欢

热点阅读