什么是协程?
协程算是一种特殊的程序调用。它有两个特征:
- 可中断:是类似CPU的中断,CPU在这里直接释放转到其他程序断点继续执行。
- 可恢复:等到合适的时候,可以恢复到中断的地方继续执行
特殊之处:在执行过程中,在子程序(或者说函数)内部可中断,然后转而执行别的子程序,在适当的时候再返回来接着执行。
和进程线程的区别
无论是进程还是线程,都是由操作系统所管理和切换的。
进程和线程的切换完全是用户无感,从用户态到内核态再到用户态。
协程的切换完全是程序代码控制的,在用户态的切换,就像函数回调的消耗一样,在线程的栈内完成。
进程是操作系统资源分配的基本单位。
进程是程序的启动实例,拥有代码和打开的文件资源、数据资源、独立的内存空间。
线程是操作系统调度和执行的最小单位。
线程从属于进程,是程序的实际执行者,一个进程至少包含一个主线程,也可以有更多的子线程,线程拥有自己的栈空间。
协程又叫微线程,但其实它和进程还有线程完全不是一个维度上的概念。
python的协程(Goroutine)
协程的概念:
python的协程其实是我们通常意义上的协程Goroutine,在适当的时候可中断可恢复。
还可以理解为**生成器+调度策略**,生成器中的**yield**关键字,就可以让生成器函数发生中断,而调度策略,可以驱动着协程的执行和恢复。
调度策略对协程做了更好的封装,方法如下:
- 忙轮循:while True

本文探讨了协程的概念,与进程线程的区别,并深入比较了Python(Goroutine)和Go语言中协程的实现、特点。Python协程通过生成器和调度策略实现,适合IO密集型程序,而Go协程(goroutine)具备多核并行能力,采用抢占式调度,两者在协程通信和调度机制上也有所不同。
最低0.47元/天 解锁文章
1570

被折叠的 条评论
为什么被折叠?



