[英]Non-blocking http server , java nio , python tornado eventlet
嗨,我想了解基於tornado / eventlet的http服務器是否優於線程服務器。 在看到主題時,我看到這些是單線程事件基本服務器,它在套接字上的select / poll / epoll之后運行單個處理函數。
這些問題是相關的,我會很感激,因為我沒有正確理解這些問題
謝謝
如果所有庫都提供非阻塞apis,則非阻塞服務器是最佳選擇。 如第二個問題所述,如果庫阻塞(例如數據庫lib進行阻塞調用),則整個進程/線程塊和系統掛起。 並非所有可用的庫都是異步的,因此很難對所有用例使用tornado / eventlet。 此外,在多核盒中,需要啟動多個非阻塞服務器實例以完全使用盒容量。
Tornado / Event服務器類似於基於java nio的服務器。 Tornado和Eventlet之間存在一個概念上的區別。 Tornado遵循反應器模式,其中單個進程等待IO(套接字)事件並將它們分派給適當的處理程序。 如果處理程序是非阻塞的,則可以獲得最佳性能。 通常,為這些框架編寫的代碼包含一系列回調,使其比同步服務器的可讀性低一些.Java NIO服務器屬於此類別。
Eventlet執行相同的任務,但界面更清晰。 代碼可以像同步服務器一樣編寫而不使用回調。 遇到IO時,eventlet會調度另一個用戶空間進程(不是正確的術語)。
由於幾個原因,Apache webapps更受歡迎
但是,對於編寫處理大量連接的聊天應用程序,多線程服務器將無法擴展。 您必須使用twisted / event / Java NIO等異步框架。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.