2014-06-18 30 views
29

在heroku dyno的背景下,puma工人和puma線程有什麼區別?Puma工人和線程之間有什麼區別

我知道什麼(請糾正我,如果我錯了):

  • 瘦是不是併發的,所以網絡的過程只能做一個請求中同時

  • 在麒麟,我知道我可以在一個進程中添加幾個獨角獸工作者來增加併發性。

但在美洲獅有線程和工人..是不是工人在美洲獅過程中的線程?

我可以在Heroku中使用更多工作者/線程來添加Web併發嗎?

回答

23

正如其他答案所述,此Heroku article是相當不錯的解釋某些配置項目。

但是,如果您需要在Heroku或任何地方調整您的應用程序,那麼它知道如何工作。

我認爲當你說:「工人是彪馬進程中的一個線程」你幾乎是正確的,我認爲一個工人是彪馬,然後可以在內部使用的線程分叉的操作系統級別的進程。

據我所知 - puma將分叉它的操作系統進程,然而很多時候你通過workers配置來響應http請求。這在處理多個請求方面爲您提供了並行性,但這通常會佔用更多的內存,因爲它會爲每個工作人員「複製」您的應用程序代碼。取決於threads配置其OS進程內

每個PUMA工人然後將使用多個線程。這些通過允許puma進程本身響應多個請求來增加併發性,以便如果一個線程被阻塞,即處理請求,它可以處理另一個線程的新請求。如前所述,這需要整個應用程序是線程安全的,這樣,例如從一個請求的任何全局配置不「泄漏」到另一個。

您會調整puma,以便工作人員的數量足以滿足CPU和內存的可用數量,然後根據您希望運行應用程序的主機的飽和程度以及您的應用程序的行爲方式來調整線程 - 更多並不總是等於更快/更多的請求吞吐量。

12

這是一個很大的區域,我不是專家,但是......

彪馬可以生成許多工人,每個工人可以使用多個線程來處理請求。

據我所知,Unicorn沒有線程,它只有工作人員模型。

如果你使用線程,你需要確保你的代碼是線程安全的。這意味着Rails,你依賴的任何寶石,以及你自己的代碼。

爲獲得最佳性能,您可能還需要查看JRubyRubinius,它們有適當的線程支持。 MRI受其GIL限制。

有一個good article on Heroku它解釋了彪馬如何使用工人和線程。您應該閱讀並忽略我:)

+0

「......每個工人都可以使用多個線程來處理請求」是不正確的。它只會在每個請求中使用一個線程。 (除非你的應用程序代碼手動產生線程)。如果可以在同一個進程中使用多個線程來處理多個請求。 –

相關問題