tornado源码分析(一)之事件循环IOLoop

事件驱动编程是一种网络编程范式,这里程序的执行流由外部事件来决定。它的特点是包含一个事件循环,当外部事件发生时使用回调机制来触发相应的处理。另外两种常见的编程范式是(单线程)同步以及多线程编程。

让我们用例子来比较和对比一下单线程、多线程以及事件驱动编程模型。下图展示了随着时间的推移,这三种模式下程序所做的工作。这个程序有3个任务需要完成,每个任务都在等待I/O操作时阻塞自身。阻塞在I/O操作上所花费的时间已经用灰色框标示出来了。

可以看出时间驱动模型对cpu的使用率是最高的,他不会因某一个任务的阻塞而导致整个进程的阻塞,总是有一个可运行的任务在执行。

tornado就是使用事件驱动模型实现的,IOLoop即为tornado的事件循环,也是tornado的核心,tornado在ioloop中循环检查三类事件:

1、可立即执行的事件(ioloop._callbacks),这类事件一般是Future在set_result是将Futrue中的所有call_back以这种类型的事件添加至ioloop,ioloop在存在这类事件时会立即调度这些事件的回掉函数。

添加可立即执行的事件的接口:ioloop.add_callback(callback)

2、timer定时器事件,ioloop中维护一个定时器事件列表(按照timeout时间,以最小堆的形式存储),在ioloop循环至定时器事件时,不断的判断堆顶的定时器是否超时,如果超时

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值