Twisted對網絡應用開發者來說是一個平台。Python語言本身就很強大,但它缺少很多其他語言都在極力添加的功能。現在好了,Twisted是一款很好的(稍微特別的)純Python框架或庫,這取決於你如何看待它,並且它不斷的在完善。
1. 如果做一件事情是有順序的,先做完Task1,再做Task2,最後做Task3,這類事情也是我們日常見的最多的一種情況,如下圖所示:
650) this.width=650;" border=0>
2. 如果做一件事情並沒有順序之分,可以同時進行,每一件事情也是相對獨立的,其實這就是一種同步模型。當然,其實這也是一種理想情況,在大多數情況下,進程之間或線程之間往往要進行通信,一個任務會等待另外一個任務的返回結果,這就有些較為復雜了,如下圖所示:
650) this.width=650;" border=0>
3. 在異步模型中,任務是交替運行的,但仍然在一個進程中,其中每個任務的運行狀態都是可以被我們控制的,如下圖所示:
650) this.width=650;" border=0>
異步模型與同步模型有什麼區別嗎?
a) 同步模型中的任務交替運行,是需要多個線程協同完成的,受到程序的控制,而在異步模型中則不需要。
b) 多線程本身就受到操作系統的調度與管理,所以同步模型本身就受到操作系統控制的,而在異步模型中一個任務會一直運行下去,直到任務被運行完或者程序暫停這個任務而去執行令一個任務。
異步模型有什麼特點,為什麼要深入了解並學習呢?
異步模型比同步模型簡單,因為異步模型只有一個進程而且任務的停止和運行狀態是可控的。而在同步模型中,我們需要把每一個任務分成很多步驟,然後再有序的把他們組合起來。如果一個任務用到了令一個任務的結果,這個任務需要接受另一個任務的輸出做為他自己的輸入,而且這種接收的數據經常是一段一段的而不是一個整體。
異步模型與同步模型都是一個線程的話,他們執行相同的任務應該花費相同的時間,甚至比同步模型花費的時間更多,為什麼要才采用異步的模型呢?
如果程序中會有阻塞、被強迫等待等情況,異步模型會比同步模型運行速度快,同步模型在有阻塞的時候的執行過程如下圖所示:
650) this.width=650;" border=0>
圖中灰色的部分代表阻塞(等待),其中阻塞的原因很多時候是由於I/O操作,這樣的一個同步程序被稱為“阻塞程序”。異步程序設計的原理就是當其中一個任務被阻塞的時候,可以先去執行一些其他可以執行的任務所以一個異步程序也會被叫做“無阻塞程序”。
那什麼時候,我們需要考慮使用異步模型呢?
a) 有很多任務,經常總有一個任務可以繼續執行
b) 這些任務中要執行很多I/O操作
c) 這些任務大多都是獨立的
這些優勢,非常適合一個非常繁忙的Web Server,每一個任務代表了一次接收請求和發送結果,而這些Client 請求大多都是獨立的,所以一個Web Server的實現一個很好的異步模型的實現,這就是Twisted被叫做網絡編程庫的原因。