注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

itoedr的it学苑

记录从IT文盲学到专家的历程

 
 
 

日志

 
 

Python之编程框架:Twisted  

2014-10-11 09:00:50|  分类: 现代编程方法 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
        Twisted起源于一款游戏,并在游戏中用于商业活动中,我个人也希望它能给用户带来Entertaining的交互的用户体验。Twisted对网络应用开发者来说是一个平台。Python语言本身就很强大(要不openstack也不会用它来建设),但它缺少很多其他语言都在极力添加的功能。现在好了,Twisted是一款很好的纯Python框架或库(对于编程者而言,可以在这个框架下使用她提供的更多高质量关联库)。
    关于twisted框架的理解。

     1. 如果做一件事情是有顺序的,先做完Task1,再做Task2,最后做Task3,这类事情也是我们日常见的最多的一种情况,如下图所示:

 

    2. 如果做一件事情并没有顺序之分,可以同时进行,每一件事情也是相对独立的,其实这就是一种同步模型。当然,其实这也是一种理想情况,在大多数情况下,进程 之间或线程之间往往要进行通信,一个任务会等待另外一个任务的返回结果,这就有些较为复杂了,如下图所示:

 

    3. 在异步模型中,任务是交替运行的,但仍然在一个进程中,其中每个任务的运行状态都是可以被我们控制的,如下图所示:

    异步模型与同步模型有什么区别吗?

    a) 同步模型中的任务交替运行,是需要多个线程协同完成的,受到程序的控制,而在异步模型中则不需要。

    b) 多线程本身就受到操作系统的调度与管理,所以同步模型本身就受到操作系统控制的,而在异步模型中一个任务会一直运行下去,直到任务被运行完或者程序暂停这个任务而去执行令一个任务。

    异步模型有什么特点,为什么要深入了解并学习呢?

    异步模型比同步模型简单,因为异步模型只有一个进程而且任务的停止和运行状态是可控的。而在同步模型中,我们需要把每一个任务分成很多步骤,然后再有序的 把他们组合起来。如果一个任务用到了令一个任务的结果,这个任务需要接受另一个任务的输出做为他自己的输入,而且这种接收的数据经常是一段一段的而不是一 个整体。

    异步模型与同步模型都是一个线程的话,他们执行相同的任务应该花费相同的时间,甚至比同步模型花费的时间更多,为什么要才采用异步的模型呢?

    如果程序中会有阻塞、被强迫等待等情况,异步模型会比同步模型运行速度快,同步模型在有阻塞的时候的执行过程如下图所示:

     图中灰色的部分代表阻塞(等待),其中阻塞的原因很多时候是由于I/O操作,这样的一个同步程序被称为“阻塞程序”。异步程序设计的原理就是当其中一个任务被阻塞的时候,可以先去执行一些其他可以执行的任务所以一个异步程序也会被叫做“无阻塞程序”。

    那什么时候,我们需要考虑使用异步模型呢?

    a) 有很多任务,经常总有一个任务可以继续执行

    b) 这些任务中要执行很多I/O操作

    c) 这些任务大多都是独立的

    这些优势,非常适合一个非常繁忙的Web Server,每一个任务代表了一次接收请求和发送结果,而这些Client 请求大多都是独立的,所以一个Web Server的实现一个很好的异步模型的实现,这就是Twisted被叫做网络编程库的原因。

    

  评论这张
 
阅读(118)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017