2013-06-15 14 views
21

Sto avendo un po 'di difficoltà a capire le differenze tra questi tre quadri:Tornado/intrecciata - Sedano - Gevent Confronto

Questi tre framework possono essere utilizzati per eseguire il codice allo stesso tempo, ma farlo in modo diverso usando una quantità diversa di thread/processi o codestyle. Questo è come sto capire le differenze in questo momento:

  • Tornado/intrecciata utilizzare il codice asincrono comandato da un loop di I/O. Ciò consente di eseguire il codice su un singolo thread (più thread sono inutili perché se si dispone di codice non bloccante non è necessario)
  • Celery utilizza un sistema basato su attività per eseguire il codice in modo asincrono, il codice in sé è ancora sincrono. Esiste un processo principale che è in grado di distribuire le diverse attività tra altri lavoratori su diversi processi.
  • Gevent utilizza un sistema basato su thread e genera una discussione per elaborare connessioni in entrata diverse.

le domande che sto avendo in questo momento sono:

  1. è la mia comprensione di questi quadri sono corretti?
  2. La principale differenza tra un thread e un processo è che thread diversi utilizzano la stessa memoria mentre i processi no. Un processo normalmente viene eseguito su un server core? (E rendendo così Sedano difficile da implementare su un piccolo server)
  3. Se stiamo parlando di applicazioni web e prese:

Tornado/ritorto sono in grado di accettare la (quasi) qualsiasi quantità di prese, perché usano codice asincrono e accodano la richiesta nel ciclo I/O.

Sono Sedano/Gevent in grado di questo? Devono generare un nuovo processo/thread per essere in grado di accettare un nuovo socket?

Sto cercando di capire quale di queste tecnologie è più adatta per creare un'applicazione web in tempo reale.

+0

Sarebbe bello aggiungere Asyncio a questa domanda e ottenere alcune risposte confrontandolo con gli altri. – chuseuiti

risposta

19
  1. Gevent utilizza greenlets invece di filettature su un ciclo IO implicitamente, quindi non c'è nessun reattore/IO ciclo per avviare manualmente in caso di Twtisted/ciclone. Ha anche la capacità di scomporre le librerie esistenti di patch per supportare la sua operazione event, Tornado e Twisted richiedono librerie specifiche per lavorare con i loro loop di eventi anche se ne troverete molti già esistenti.

    Celery è reso molto più utile per l'elaborazione in background per scaricare costosi calcoli su un altro processo/server.

  2. I processi possono condividere la memoria ma non nello stesso modo dei thread. I thread in CPython soffrono dello GIL e in genere non vale la pena utilizzare una soluzione con thread se si sta facendo qualcosa a livello di CPU.

    Non sono sicuro dei requisiti di memoria di Celery ma se si utilizza 1 processo Web e 1 processo in background, si dovrebbe andare bene anche su un VPS da 256 MB, anche se è meglio se si supportano molte connessioni.

  3. Il numero di socket che possono essere gestiti con Tornado/Twisted/Gevent sarà probabilmente limitato dalla quantità e dalla frequenza dell'IO eseguito per socket. Gli zoccoli a bassa frequenza/bassa larghezza di banda sono molto più facili da supportare per un numero elevato di connessioni simultanee poiché sono in gran parte inattivi.

    Celery richiede ancora alcune applicazioni per ascoltare i socket e effettuare le chiamate da elaborare con il demone di Celery. Supporta Gevent e consente di gestire più attività contemporaneamente se necessario.