
tornado
文章平均质量分 50
circle_breaker
这个作者很懒,什么都没留下…
展开
-
tornado源码分析(一)之事件循环IOLoop
事件驱动编程是一种网络编程范式,这里程序的执行流由外部事件来决定。它的特点是包含一个事件循环,当外部事件发生时使用回调机制来触发相应的处理。另外两种常见的编程范式是(单线程)同步以及多线程编程。让我们用例子来比较和对比一下单线程、多线程以及事件驱动编程模型。下图展示了随着时间的推移,这三种模式下程序所做的工作。这个程序有3个任务需要完成,每个任务都在等待I/O操作时阻塞自身。阻塞在I/O操作上...原创 2018-12-02 14:44:29 · 2625 阅读 · 0 评论 -
tornado源码分析(二)之iostream
与ioloop直接交互时通用的过程需要读数据时:将socket添加至ioloop中,并设置回掉函数,在回掉函数中从socket中读取数据,并且检查是否接受到了足够的数据,如果没有接收完则需要保存当前的数据,直到读去完为止。需要写数据时:将socket添加至ioloop中,并设置回掉函数,在回掉函数中向socket写数据,如果数据比较多,则需要分多次去写。iostream的作用让各组...原创 2018-12-02 16:09:17 · 642 阅读 · 0 评论 -
tornado源码分析(四)之future、gen.coroutine
future是什么在事件驱动编程模型中,会有很多的事件循环,各事件循环在创建异步事件时可以同时创建一个future对象,并将创建的异步事件与该future对象存储在一起,并将所有传入的callback回掉函数存入future中,当异步事件发生后,直接调用future的set_result函数,该函数会调用所有存在future中的回掉函数。所以future就代表某个时间循环的某个异步事件,它...原创 2018-12-05 18:37:01 · 1389 阅读 · 0 评论 -
python epoll
事件驱动模型事件驱动编程是一种网络编程范式,程序的执行流由外部事件来决定。它的特点是包含一个事件循环,程序可能关注多种事件,在事件循环中不断去轮询监控各种事件,如果某个事件发生,则调用该事件注册的回掉函数。影响事件驱动模型的两点轮询各种事件的效率:如果时间循环在查询某个事件时阻塞了,那么当其它事件到达时势必无法及时响应,影响性能。回掉函数的效率:如果回掉函数在处理某个事件时用时较长...原创 2018-12-05 19:26:54 · 755 阅读 · 0 评论 -
tornado源码分析(三)之tcpserver
在tornado中要使用异步的特性,tcpserver要做的通用的工作1、创建一个socket、设置为非阻塞模式、在指定的端口监听2、将该socket添加至ioloop中,并设置回掉函数3、在回掉函数中accept客户端连接,并将创建的socket包装为iostream(这样可以更方便地用异步的方式读写socket)。tornado.tcpserver.TCPServer的作用...原创 2018-12-03 21:37:42 · 546 阅读 · 0 评论