libco和tornado、协程和异步的一些理解


看了些libco的实现,感觉和tornado差不多,基本的思想还是在线程被阻塞的时候能够去做其他的事情,此时还是用epoll来调度挂起和恢复

从这点看协程依然是基于异步的,且是纯异步的,只是协程框架提供了更好的语义表达,代码书写更方便了,因此,协程的使用也是用在有一定的IO的服务中,纯计算的服务用起来并不合适。这样来看,协程和线程的使用场景不同,说协程是用户态线程容易误导人

libco和tornado比较,有以下特点:

1 python的多线程效率太低,所以tornado只能是多进程的,libco用c++实现,则是可以用于线程中的

2 libco实现了栈内存hook,引入了共享栈,优化了协程切换的内存拷贝;tornado基于python的内存管理,有gc的语言确实很方便,使用future机制

3 libco也hook了系统IO函数,这样用于开发更方便;tornado则需要自己来维护和写异步过程,尤其是用第三方rpc客户端的时候

4 libco的异步调度器是每毫秒扫一次定时器组,定时器组是一个固定大小的数组,数组元素是个拉链,每个定时器放在和定时器组当前时间差值的位置,所以不能设置太大的超时时间,默认最大是一分钟;tornado是以定时器的deadline(now+timeout)为key,将定时器组维护成了一个最小堆,异步调度器每次获取最小的定时器,以其deadline-now作为调度器的超时时间,等待调度器超时或者响应了事件之后再扫描定时器组执行

两者类似,都是牺牲了平均延迟时间&#x

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值