Python - 协程

发布时间 2023-10-17 16:28:19作者: frank_cui

总结

1.对协程的理解

协程为单线程。在协程中,程序员是系统的调度中心,程序员已经知道哪里有IO开销大的地方,主动放弃控制权给其他函数来执行。

 

2.对await的理解

开发者要提前知道一个任务的哪个环节会造成I/O阻塞,然后把这个环节的代码异步化处理,并且通过await来标识在任务的该环节中断该任务执行,从而去执行下一个事件循环任务。这样可以充分利用CPU资源,避免CPU等待I/O造成CPU资源白白浪费。当之前任务的那个环节的I/O完成后,线程可以从await获取返回值,然后继续执行没有完成的剩余代码。

 

 

3.对async的理解

async表示其修饰的是协程任务即task

 

4.协程只适合IO密集型

协程只适合IO密集型,且程序员自己知道哪一步操作耗时严重

如果一个任务不涉及到网络或磁盘I/O这种耗时的操作,而只有CPU计算和内存I/O的操作时,协程并发的性能还不如单线程loop循环的性能高。

 

5.协程 vs 多线程

一是协程为单线程;

二是协程由程序员决定,在哪些地方交出控制权,切换到下一个任务