概念:
线程:系统级别的,它们由操作系统调度cpu.
协程:程序级别的,由程序根据需求自己调度。
函数:又称为子程序,是所偶语言中都是层级调用
在一个线程中由很多函数,又称为子程序,在子程序执行过程中可以终端去执行别的子程序,而别的子程序又可以终端回来继续执行之前的子程序这个过程叫做协程。也就是说在同一线程内一段代码在执行过程中断然跳转执行别的代码,接着在之前中断的地方继续开始执行。
子程序正常调用
def A():
print('1')
print('2')
print('3')
print('4')
def B():
print('x')
print('y')
print('z')
A()
B()
1
2
3
4
x
y
z
如果通过协程可以实现A函数先执行一些,然后中断,再去执行B函数的一部分,中断,然后把A函数剩下的执行完,把B函数剩下的执行完。
运行原理:协程拥有自己的寄存器上下文和栈。协程调度切换时,将寄存器上下文和栈保存在其他地方,在切回来时候,回复先前保存的寄存器上文和栈。因此,协程能保留上一次调用时的状态,即所有局部状态的一个特定组合,每次通过重入时候,旧相当于进入上一次调用的状态,换种说法:进入上一次离开时候所处逻辑流的位置
协程调用优点:
1.无需线程上下文切换的开学,协程避免了无意义的调度,可以提高性能。
2.无需原子操作锁定及同步的开销
3.
方便切换控制流,简化编程模型。
3.高并发高扩展低成本,在一个CPU上支持
缺点:
1.无法利用多核资源,协程的本质是个单线程,它不能同时将单个CPU的多个核用上,协程需要和进程配合才能运行在多CPU上。
2。进行阻塞操作回阻塞整个程序