Threadsafe! i puma

Hej,
z włączonym threadsafe na pumie:

[22911] * Process workers: 3 [22911] * Min threads: 8, max threads: 32
Na pewnej akcji miałem 1.9 r/s i czasy wykonywania były ok 1-4s, a z wyłączonym ok4.5 r/s i czasy ok 200-400 s. Skąd taka różnica? Strata była na przełączaniu pomiędzy wątkami, czy jak?

Jak można wynik poprawić (w kontekście servera?).

Ok, masz jakieś wyniki i pojawiają się pytania. Czy włączenie threadsafe faktycznie tak spowalnia aplikację? Takie wnioski byłyby zbyt daleko idące. Zacząłbym od dużo prostszego przypadku.
Porównaj appkę w 2 setupach:

  • threadsafe wyłączony, 1 proces pumy z 1 wątkiem (-t 1:1 -w 1)
  • threadsafe włączony, 1 proces pumy z 1 wątkiem (-t 1:1 -w 1)

Jeśli tu już będzie tak duża różnica to faktycznie coś będzie na rzeczy.

Miałem podobnie złe wyniki w przypadku 1.9 z wieloma wątkami (chociaż akurat aplikacja nie RoR).

Przenieś aplikację na JRuby albo MRI zanim przesiądziesz się z unicorna albo passengera na pumę. Poza tym, nawet w takim wypadku nie przesadzałbym z ilością wątków, systemy operacyjne lepiej sobie radzą z zarządzaniem dostępem do zasobów na poziomie procesów niż wątków. To w szczególności tyczy się wejścia-wyjścia.

Potencjalne spowalniacze to: driver bazy danych, RMagick i większość rozszerzeń napisanych w C/C++. W mojej aplikacji to driver do postgresqla sprawiał problemy w aplikacji wielowątkowej na MRI, po przejściu na JRuby + postgresql-odbc problem zniknął + zniknęły randomowe errory w testach (shared connection działa).