Come dice l'altra risposta, questo Heroku article è abbastanza buono con le spiegazioni di alcuni elementi di configurazione.
Tuttavia, se è necessario regolare la propria applicazione su Heroku o in qualsiasi altro punto, è necessario sapere come funzionano le cose.
Penso che tu sia quasi corretto quando dici "un lavoratore è un thread all'interno del processo puma", credo che un lavoratore sia un processo a livello di sistema operativo biforcato da puma che quindi può utilizzare i thread internamente.
Per quanto ho capito, puma eseguirà il processo del sistema operativo tutte le volte che si imposta tramite la configurazione workers
per rispondere alle richieste http. Questo ti dà il parallelismo in termini di gestione di più richieste, ma di solito occuperà più memoria poiché "copierà" il codice dell'applicazione per ciascun lavoratore.
Ogni puma worker utilizzerà quindi più thread all'interno del processo del sistema operativo in base alla configurazione threads
. Questi aggiungono la concorrenza consentendo al processo puma di rispondere a più richieste in modo tale che, se un thread è bloccato, cioè elaborando una richiesta, può gestire una nuova richiesta con un altro thread. Come detto, ciò richiede che l'intera applicazione sia protetta da thread, in modo tale che, ad esempio, qualsiasi configurazione globale da una richiesta non "perdite" in un'altra.
Si sintonizza Puma in modo che il numero di lavoratori fosse adeguato per il numero di CPU e memoria disponibili e quindi ottimizzare i thread in base a quanto si vorrebbe saturare l'host che esegue l'applicazione e come si comporta l'applicazione - altro non sempre equivale più veloce/più richiesta di throughput.
fonte
2015-04-21 12:39:15
"... ogni lavoratore può utilizzare molti thread per elaborare la richiesta" non è corretto. Userebbe sempre solo un thread per richiesta. (a meno che il codice dell'app non abbia generato manualmente thread). Se è possibile server più richieste all'interno dello stesso processo utilizzando più thread però. –