Khi các trạng thái câu trả lời khác, số Heroku article này khá tốt với các giải thích về một số mục cấu hình nhất định.
Tuy nhiên, nếu bạn cần điều chỉnh ứng dụng của mình trên Heroku hoặc ở bất kỳ đâu, thì nó sẽ trả tiền để biết cách hoạt động của mọi thứ.
Tôi nghĩ rằng bạn là gần như chính xác khi bạn nói "một công nhân là một chủ đề trong quá trình puma", tôi tin rằng một công nhân là một hành trình cấp hệ thống chia hai từ puma mà sau đó có thể sử dụng chủ đề nội bộ.
Theo như tôi hiểu - puma sẽ xử lý hệ điều hành của mình tuy nhiên nhiều lần bạn đặt qua cấu hình workers
để phản hồi yêu cầu http. Điều này mang lại cho bạn tính song song về xử lý nhiều yêu cầu nhưng điều này thường sẽ chiếm nhiều bộ nhớ hơn vì nó sẽ 'sao chép' mã ứng dụng của bạn cho mỗi công nhân.
Mỗi nhân viên puma sau đó sẽ sử dụng nhiều luồng trong quá trình hệ điều hành tùy thuộc vào cấu hình threads
. Những điều này thêm đồng thời bằng cách cho phép quá trình puma đáp ứng với nhiều yêu cầu chính nó sao cho nếu một luồng bị chặn, tức là xử lý một yêu cầu, nó có thể xử lý một yêu cầu mới với một luồng khác. Như đã nói, điều này yêu cầu toàn bộ ứng dụng của bạn phải là luồng an toàn để, ví dụ như bất kỳ cấu hình toàn cục nào từ một yêu cầu không bị 'rò rỉ' vào một yêu cầu khác.
Bạn sẽ điều chỉnh puma sao cho số lượng công nhân đủ cho số CPU và bộ nhớ có sẵn và sau đó điều chỉnh luồng phụ thuộc vào số lượng bạn muốn bão hòa máy chủ chạy ứng dụng của bạn và cách ứng dụng của bạn hoạt động - nhiều hơn không phải lúc nào cũng bằng thông lượng yêu cầu nhanh hơn/nhiều hơn.
Nguồn
2015-04-21 12:39:15
"... mỗi công nhân có thể sử dụng nhiều luồng để xử lý yêu cầu" không chính xác. Nó sẽ chỉ bao giờ sử dụng một sợi cho mỗi yêu cầu. (trừ khi mã ứng dụng của bạn tạo chuỗi thủ công). Nếu có thể máy chủ nhiều yêu cầu trong cùng một quá trình bằng cách sử dụng nhiều chủ đề mặc dù. –