协程学习

协程

学习过程

首先去刷汇编的寄存器和远跳指令,搞清楚协程切换就是保存寄存器+跳转到另一个函数的半中间。在此之上可以构建爱你个调度器,也可以不构建。刷TAOCP卷一的coroutine那一章。不弄懂协程的运作机制学起来便不踏实。

明白之后可以考虑同步接口,异步接口和协程的关系了。

假设你有10个文件,你想把10个文件拼接起来模拟成一个大文件。但是你的内存有没有那么大,那只好读一点让用户消耗一点了。所以你得写个filecat这样的adaptor。

如果所有接口都用同步,用户是爽了,仿佛直接在读一个文件;你实现的很麻烦,每当用户问你要数据的时候,你得先检查我现在读到第几个文件了,读完了没有,后面还有没有别的文件了,要维护一堆状态。

如果所有接口都用异步,你是爽了,直接把用户的回调挨个传到不同的文件读写调用里去;用户则麻烦了,要是用户想读三行,停一停去做别的(比如处理下这三行),是很麻烦的,因为你这个adaptor往用户端塞数据塞的根本停不下来,用户有什么想法都得往回调函数里面塞。“我现在读到第几行了?如果小于三行,就先送到处理头三行的函数里去;如果等于三行,就要拿一下处理好的三行并送去不知道什么地方,如果大于三行,再干点别的。。。”所以用户得手动维护这些状态。

你会发现无论是同步还是异步,都有这种“手动维护状态”的问题。要想让adaptor和用户都开心,解法自然是协程。我现在就用代码来表示状态,执行一行就是状态的转移。但是两头的状态要交替变化,这边做三行,轮到那边做了;那边做完了,又回到这边来,这跳来跳去的,就是协程了。

你可能感兴趣的:(协程学习)