Python Web系列学习4-Twisted

1、Twisted是一个高性能的编程框架,在不同的操作系统上利用不同的底层技术实现了高效能通信。在Windows中,Twisted的实现基于I/O完成端口技术。在开发方法上,使用异步编程模型。

2、在异步编程模型与多线程模型之间还有一个不同:在多线程程序中,对于停止某个线程启动另外一个线程,其决定权并不在程序员手里而在操作系统那里,因此,程序员在编写程序过程中必须要假设在任何时候一个线程都有可能被停止而启动另外一个线程。相反,在异步模型中,一个任务要想运行必须显式放弃当前运行的任务的控制权。这也是相比多线程模型来说,最简洁的地方。 值得注意的是:将异步编程模型与同步模型混合在同一个系统中是可以的。

                                                                                                 异步编程模型

异步程序背后的最主要的特点就在于,当出现一个任务像在同步程序一样出现阻塞时,会让其它可以执行的任务继续执行,而不会像同步程序中那样全部阻塞掉。因此一个异步程序只有在没有任务可执行时才会出现"阻塞",这也是为什么异步程序被称为非阻塞程序的原因。 任务之间的切换要不是此任务完成,要不就是它被阻塞。由于大量任务可能会被阻塞,异步程序等待的时间少于同步程序而将这些时间用于其它实时工作的处理(如与人打交道的接口),这样一来,前者的性能必然要高很多。

与同步模型相比,异步模型的优势在如下情况下会得到发挥:

  1. 有大量的任务,以至于可以认为在一个时刻至少有一个任务要运行
  2. 任务执行大量的I/O操作,这样同步模型就会在因为任务阻塞而浪费大量的时间
  3. 任务之间相互独立,以至于任务内部的交互很少。

这些条件大多在CS模式中的网络比较繁忙的服务器端出现(如WEB服务器)。每个任务代表一个客户端进行接收请求并回复的I/O操作。客户的请求(相当于读操作)都是相互独立的。因此一个网络服务是异步模型的典型代表,这也是为什么twisted是第一个也是最棒的网络库。

3、twisted网络框架的三个基础模块:Protocol, ProtocolFactory, Transport.这三个模块是构成twisted服务器端与客户端程序的基本。

猜你喜欢

转载自blog.csdn.net/chenkaifang/article/details/80963711