twisted 是python開發的一個異步編程的框架。且twisted是一個高度抽象的體系,所有對於使用同步編程轉變為異步是有點難以適應。
模型
平時比較熟悉的模型有同步模型,多線程,以及異步。假設解決完成三個獨立的任務,對三種模型實現方式介紹。
1.同步模型
對於同步模型來說,就是三個任務順序執行,第一個任務執行完成再開始第二個任務。最後一個任務完成,即三個任務完成。
2.多線程模型
多線程模型中是為每個任務賦一個線程,操作系統負責線程資源的分配。如果硬件資源支持,即包含多個CPU系統,多線程可能相互獨立運行。可是對於python語言,由於GIL(全局解釋器鎖)緣故,它保證同一時刻只有一個線程可以執行,所以真正意義上的多線程不能實現。當然多線程是可以利用多核的CPU,當一個任務處於I/O阻塞,可以切換到另外一個線程中。
3. 異步模型
異步模型的形式是將三個任務在單線程中交錯執行,當一個任務處於阻塞情況,就把執行權交個另外線程,直至線程執行完成,這種方式開發人員可以控制線程的執行,而且比多線程模式簡單,只需要控制一個線程。
總結:
在同步模型中,如果一個任務會出現I/O操作或網絡請求,就容易出現阻塞狀態,如圖4中,灰色時間段就是由於阻塞導致的時間浪費。如果在一個任務出現阻塞時轉到另外一個任務,這樣就避免了阻塞時的等待時間。所以這種情況下異步模型是一種不出的解決方案。
異步模型的應用場景有:
1.有大量任務執行,這樣在任何時候,就有至少有一個任務執行
2.任務中有大量的I/o操作,也就是同步操作中會出現阻塞情況浪費大量時間
3.任務多數相互獨立,內部任務之間交互較少。
閱讀更多 用數說話 的文章