2014-06-18 11 views
29

Sự khác biệt giữa công nhân puma và sợi chỉ trong ngữ cảnh của doku doku là gì?Sự khác nhau giữa Công nhân và Chủ đề trong Puma

Những gì tôi biết (hãy sửa lại cho tôi nếu tôi sai):

  • mỏng không phải là đồng thời, do đó, một quá trình web có thể chỉ làm một yêu cầu tại một thời điểm

  • Trong kỳ lân, tôi biết tôi có thể có một vài công nhân kỳ lân trong một quá trình để thêm đồng thời.

Nhưng trong puma có chủ đề và người lao động .. Không phải là một nhân viên một sợi bên trong quá trình puma?

Tôi có thể sử dụng nhiều công nhân/chủ đề để thêm đồng thời web vào Heroku không?

Trả lời

23

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.

12

Đây là một khu vực lớn và tôi không phải là một chuyên gia, tuy nhiên ...

Puma có thể đẻ trứng nhiều người lao động, và mỗi công nhân có thể sử dụng nhiều chủ đề để xử lý yêu cầu.

Unicorn không có chủ đề theo như tôi biết, nó chỉ có mô hình công nhân.

Nếu bạn sử dụng chuỗi mặc dù, bạn cần đảm bảo rằng mã của bạn là chuỗi an toàn. Điều này có nghĩa là Rails, bất kỳ đá quý nào bạn dựa vào và mã của riêng bạn.

Để có hiệu suất tối đa, bạn cũng có thể muốn xem xét JRuby hoặc Rubinius có hỗ trợ luồng thích hợp. MRI bị hạn chế bởi GIL của nó.

Có một số good article on Heroku giải thích cách Puma sử dụng công nhân và chủ đề. Có lẽ bạn nên đọc điều đó và bỏ qua tôi :)

+0

"... 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ù. –

Các vấn đề liên quan