总结
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 多线程
一是协程为单线程;
二是协程由程序员决定,在哪些地方交出控制权,切换到下一个任务