簡體   English   中英

龍卷風/扭曲 - 芹菜 - Gevent比較

[英]Tornado/Twisted - Celery - Gevent Comparison

我在理解這三個框架之間的差異時遇到了一些麻煩:

這三個框架可以用於同時運行代碼,但使用不同數量的線程/進程或代碼樣式以不同的方式執行此操作。 這就是我現在理解差異的方式:

  • Tornado / Twisted使用由I / O循環控制的異步代碼。 這允許代碼在單個線程上運行(多個線程是無用的,因為如果你有非阻塞代碼,這是不必要的)
  • Celery使用基於任務的系統異步運行代碼,代碼本身仍然是同步的。 存在一個主要過程,能夠在不同進程的其他工作者之間分配不同的任務。
  • Gevent使用基於線程的系統並生成一個線程來處理不同的incomming連接。

我現在遇到的問題是:

  1. 我對這些框架的理解是否正確?
  2. 線程和進程之間的主要區別在於不同的線程使用相同的內存,而進程則沒有。 一個進程通常在一個服務器核心上運行嗎? (從而使Celery很難在小型服務器上實現)
  3. 如果我們談論web應用程序和套接字

Tornado / Twisted能夠接受(幾乎)任意數量的套接字,因為它們使用異步代碼並在I / O循環中對請求進行排隊。

Celery / Gevent能夠做到這一點嗎? 他們是否必須生成一個新的進程/線程才能接受新的套接字?

我試圖弄清楚哪種技術最適合構建實時Web應用程序。

  1. Gevent隱式使用greenlet代替IO循環上的線程,因此在Twtisted / Tornado的情況下沒有反應器/ IO循環來手動啟動。 它還具有修補現有庫以支持其操作的能力,Tornado和Twisted需要特定的庫來處理它們的事件循環,盡管你會發現許多已經存在。

    Celery為后台處理做了更多工作,以便將昂貴的計算卸載到另一個進程/服務器。

  2. 進程可以共享內存,但不能與線程共享內存。 CPython中的線程受GIL影響 ,如果你正在做任何CPU密集型操作,通常不值得使用線程解決方案。

    我不確定Celery的內存要求,但如果你使用1個網絡進程和1個后台進程,即使在256MB VPS上也應該沒問題,但如果你支持很多連接則會更好。

  3. 可以使用Tornado / Twisted / Gevent處理的套接字數量可能受每個套接字完成IO的數量和頻率的限制。 低頻/低帶寬套接字更容易支持大量並發連接,因為它們通常是空閑的。

    Celery仍然需要一些應用程序來監聽套接字並使用Celery守護程序進行調用。 它還支持Gevent,因此您可以根據需要同時處理多個任務。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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