2016-06-06 22 views
6

Ho bisogno di generare N thread all'interno di un container. Ho intenzione di ricevere un elenco di elementi, quindi dividerlo in blocchi e ogni thread elaborerà ogni blocco.Più thread all'interno del contenitore mobile

Quindi sto utilizzando un contenitore di finestra mobile con un processo e N thread. È buona pratica nella finestra mobile? Penso di sì, perché abbiamo, ad esempio, un server web Apacha che gestisce i thread spawining delle connessioni.

Oppure sarà meglio generare N contenitori ciascuno per ogni blocco? Se lo è, qual è il modo corretto per farlo?

risposta

4

Un contenitore in quanto tale non ha nulla a che fare con il calcolo che è necessario eseguire. La domanda che stai postando è se dovrei avere più processi che eseguono la mia elaborazione o più thread generati dallo stesso processo che esegue l'elaborazione?

Un contenitore è solo una piattaforma per l'esecuzione dell'applicazione nell'ambiente desiderato. Periodo. Significa che dovresti eseguire un processo all'interno di un contenitore per eseguire la tua logica aziendale. Più contenitori significa semplicemente più processi e, come consigliato, si dovrebbe andare per più thread piuttosto che più processi come generare un nuovo processo (nel tuo caso, come contenitore) mangerebbe più risorse e richiederebbe anche più memoria ecc. Quindi è meglio avere solo un contenitore che genererà più thread per fare il lavoro per te.

Tuttavia, il numero dipende anche dalla configurazione della macchina sottostante in cui viene avviato il contenitore. Se ha senso generare più contenitori con più thread a causa delle capacità multicore dell'hardware sottostante, dovresti farlo anche tu.

3

Risposta breve:

eseguire il programma come un unico contenitore finestra mobile. Pensa a un contenitore docker come a un ambiente isolato leggero, simile a un ambiente virtuale, in cui è possibile eseguire un programma/servizio. Questo servizio può eseguire più thread lanciati dal programma principale: è ancora un servizio in esecuzione su un singolo contenitore finestra mobile.

Spiegazione:

lascia supporre di avere un programma che genera le discussioni a così alcuni lavori - questo programma potrebbe essere un pool di thread di fare qualche calcolo su un insieme di pezzi o potrebbe essere un server web come apache. Potrebbe anche essere un codice python che istanzia un pool di processi per eseguire il calcolo del chunch. In tutti questi casi tutti i thread e i processi appartengono a un processo principale che può essere pensato come un singolo programma o servizio. Questo singolo programma viene attivato tramite un singolo comando utente, il comando che farai nel Dockerfile ENTRYPOINT.

Ad esempio, è possibile eseguire un contenitore Apache Server utilizzando l'immagine ufficiale apache sul mozzo finestra mobile docker hub ref):

docker run -dit --name my-apache-app -v "$PWD":/usr/local/apache2/htdocs/ httpd:2.4 

E questo verrà eseguito il server Web Apache come un unico contenitore, indipendentemente dal numero di thread esegue, che può essere facilmente riferito a quando l'operatore lo desidera arrestato, riavviato, cancellato, ecc. utilizzando i comandi della finestra mobile. E questo è più conveniente, poiché non dobbiamo preoccuparci di collegare volumi di montaggio, aprire porte e collegare moltitudini di contenitori, in modo che comunichino tra loro.

Quindi il punto principale è che si desidera generare un contenitore per ogni istanza di servizio. Ad esempio, se si desidera avviare istanze duplicate del processo principale. eseguire apache su due macchine come parte di una configurazione con bilanciamento del carico, quindi eseguire due contenitori, uno su ciascun host.

Inoltre, se si dispone di un caso d'uso in cui è necessario eseguire diversi lavori nel sistema batch, in cui ogni lavoro ha richiesto l'installazione di librerie specifiche, tale tipo di utilizzo trarrebbe vantaggio dall'isolamento dell'ambiente che si otterrebbe dall'esecuzione di contenitori diversi. Ma questo non è quello che hai chiesto, la tua domanda ha menzionato specificamente un server Web che genera thread e processi che utilizzano thread per fare lavoro su blocchi, e in quei casi si genera un singolo contenitore per il servizio/programma.

Problemi correlati