簡體   English   中英

非阻塞http服務器,java nio,python tornado eventlet

[英]Non-blocking http server , java nio , python tornado eventlet

嗨,我想了解基於tornado / eventlet的http服務器是否優於線程服務器。 在看到主題時,我看到這些是單線程事件基本服務器,它在套接字上的select / poll / epoll之后運行單個處理函數。

  • 我的第一個問題是這個龍卷風/ eventlet類似於java中的nio庫,是一個非阻塞且快速的java nio服務器。
  • 我的第二個問題是,因為這個基於事件的服務器是單線程如果一個連接阻塞文件io或solw客戶端將掛起整個服務器
  • 我的第三個問題是什么是權衡,如果非阻塞服務器速度快,為什么它不比apache更常見

這些問題是相關的,我會很感激,因為我沒有正確理解這些問題

謝謝

如果所有庫都提供非阻塞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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM