首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

回顾协程的学习过程

最开始接触协程这个概念,是需要用tornado,也是我学习协程的第一个阶。

我把这个阶段叫做,对原生协程的概念理解。

通过一些别人的博客,我知道协程的概念,它能起到在不同的逻辑之间进行跳出跳进。

但是对于torando的协程方式,一方面既不能理解,另一方面,也不知道如何实现——更好的描述是,我能够看懂文档中的demo,但是不知道如何用在当时的那个项目中。

那个时候,是把tornado当做同步框架来做的,又因为它是一个单线程的——所以阻塞是,特别特别明显的。

第二个阶段,换了一个项目,同样是用tornado框架。

由于项目所需要的功能,是用tornado提供的TCP服务提供长链接,所以,这个时候,对tornado的协程异步有了一个提升,也明白,最初的那个阶段,不能理解tornado的协程异步,写不出优质代码的一个原因是,当时所提供的web服务,是计算密集型的,需要用celery或者采用django(django多进程利用多核)会好一点。

虽然torando能够让计算密集型的逻辑实现协程的效果,但是,当作为服务端,tornado的目的是,利用协程和异步才能提供好的性能,计算密集型终究无法利用多核。

这个阶段,能够大致明白框架中,如何通过协程以及一个队列类似的数据结构(更好的描述是,类似poll这类的操作系统提供的功能,自己也可以用list来模仿一个),future对象,让loop不断循环。

第三个阶段,是当我在阅读《大话设计模式》时。

在第二个阶段时,我一直认为,协程的作用,就是用于切换,来利用异步的。

但是当读设计模式时,发现,在一些模式中,例如,责任链或者状态模式(可以避免if else的维护),有可能会出现溢出(我尝试去搜过关键词,但是没有搜到关于状态模式可能会导致溢出的分享,但我还是把它同递归调用或者不断调用新的函数等同,认为会有溢出的可能性),而如果用协程的概念,用例如torando中,一个队列(类似的一个结构)来存放任务时,那么递归这类带来的溢出就避免了。可能溢出的位置成为了队列,或者列表,但是当我们用链表或者其他来替换时,这个问题也避免了。

所以这个阶段,能够逐渐开始明白,协程本身具有的一些优势,而不仅仅是利用异步。

再往后?自己还没到那个程度吧。

最近怎样?

脱单了

各生欢喜

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180807G0EV0L00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券