Jaka jest różnica między robotami a nitkami w Puma

Jaka jest różnica między puma worker a puma thread w kontekście Dyno heroku?

Co wiem (popraw mnie jeśli się mylę):

  • Thin nie jest współbieżny, więc proces internetowy może wykonać tylko jedno żądanie na raz

  • W unicorn wiem, że mogę mieć kilku pracowników jednorożca w jednym procesie, aby dodać współbieżność.

Ale w pumie są nici i robotnicy.. Czy pracownik nie jest wątkiem wewnątrz procesu puma?

Czy Mogę użyć więcej pracowników / wątków, aby dodać współbieżność www w Heroku?

Author: Nick Ginanto, 2014-06-18

2 answers

Jak stwierdza druga odpowiedź, ten artykuł Heroku jest całkiem dobry z wyjaśnieniami niektórych elementów konfiguracji.

Jeśli jednak musisz dostroić swoją aplikację na Heroku, lub gdziekolwiek, to opłaca się wiedzieć, jak to działa.

Myślę, że masz prawie rację, kiedy mówisz "worker jest wątkiem wewnątrz procesu puma", wierzę, że worker jest procesem na poziomie systemu operacyjnego rozwidlonym z puma, który następnie może używać wątków wewnętrznie.

As far as I understand - puma będzie rozwidlać proces systemu operacyjnego tyle razy, ile razy ustawisz konfigurację workers, Aby odpowiadać na żądania http. Daje to równoległość w zakresie obsługi wielu żądań, ale zwykle zajmuje to więcej pamięci, ponieważ "kopiuje" kod aplikacji dla każdego pracownika.

Każdy pracownik puma będzie następnie używać wielu wątków w swoim procesie OS w zależności od konfiguracji threads. Te dodają współbieżność, pozwalając procesowi puma odpowiadać na wiele żądań tak, że jeśli jeden wątek jest zablokowany, tj. przetwarzanie żądania, może obsłużyć nowe żądanie z innym wątkiem. Jak wspomniano, wymaga to, aby cała Twoja aplikacja była bezpieczna dla wątków, tak aby na przykład jakakolwiek globalna konfiguracja z jednego żądania nie "przeciekała" do innego.

Dostroiłbyś pumę tak, aby liczba pracowników była adekwatna do liczby dostępnych procesorów i pamięci, a następnie dostroił wątki zależne od tego, ile chcesz nasycić hosta uruchamiającego Twoją aplikację i jak zachowuje się Twoja aplikacja - więcej nie zawsze równa się szybsza / większa przepustowość żądania.

 28
Author: robert_murray,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-08-25 17:39:21

To duży obszar i nie jestem ekspertem...

Puma może wyzwolić wielu pracowników, a każdy pracownik może użyć wielu wątków do przetworzenia żądania.

Unicorn nie ma wątków z tego co wiem, ma tylko model worker.

Jeśli używasz wątków, musisz upewnić się, że Twój kod jest bezpieczny dla wątków. Oznacza to Rails, każdy klejnot, na którym polegasz i twój własny kod.

Aby uzyskać maksymalną wydajność, warto również zajrzeć do JRuby lub Rubinius które mają odpowiednie wsparcie wątku. Rezonans magnetyczny jest ograniczony przez GIL.

Jest dobry artykuł o Heroku , który wyjaśnia, jak Puma wykorzystuje pracowników i nici. Powinieneś to przeczytać i zignorować:)

 13
Author: jordelver,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-01-15 10:53:08