2012-11-20 28 views
12

Tôi đã đọc tài liệu cố gắng hiểu khi nào có ý nghĩa để tăng kích thước hồ bơi không đồng bộ bằng nút chuyển + A N.Khi nào nó thích hợp để tăng kích thước chuỗi không đồng bộ từ số không?

Tôi hoàn toàn chuẩn bị cho điểm chuẩn, nhưng tôi tự hỏi liệu có quy tắc hay không khi người ta nghi ngờ rằng việc tăng kích thước hồ bơi từ 0 lên N (hoặc N đến N + M) sẽ hữu ích .

Cảm ơn

Trả lời

18

BEAM chạy mã Erlang trong các chủ đề đặc biệt gọi là schedulers. Theo mặc định nó sẽ bắt đầu một lịch trình cho mỗi lõi trong bộ xử lý của bạn. Điều này có thể được kiểm soát và khởi động thời gian, ví dụ nếu bạn không muốn chạy Erlang trên tất cả các lõi nhưng "dự trữ" một số cho những thứ khác. Thông thường, khi bạn thực hiện một thao tác I/O tập tin thì nó được chạy trong một bộ lập lịch và khi các hoạt động của tệp I/O tương đối chậm, chúng sẽ chặn trình lên lịch đó trong khi chúng đang chạy. Điều này có thể ảnh hưởng đến các thuộc tính thời gian thực. Thông thường bạn không làm nhiều tập tin I/O như vậy nó không phải là một vấn đề.

nhóm chủ đề không đồng bộ là các chuỗi hệ điều hành được sử dụng cho các hoạt động I/O. Thông thường, hồ bơi trống nhưng nếu bạn sử dụng +A khi khởi động thì BEAM sẽ tạo ra các chủ đề thêm cho nhóm này. Những chủ đề này sau đó sẽ chỉ được sử dụng cho các hoạt động tập tin I/O có nghĩa là các chủ đề lập lịch sẽ không còn chờ đợi cho tập tin I/O và các thuộc tính thời gian thực được cải thiện. Tất nhiên điều này chi phí như các chủ đề hệ điều hành không phải là miễn phí. Các chủ đề không kết hợp nên các chủ đề lập lịch chỉ là các chuỗi lịch và các chuỗi async chỉ là các chủ đề không đồng bộ.

Nếu bạn đang viết trình điều khiển được liên kết cho các cổng này cũng có thể sử dụng nhóm chủ đề không đồng bộ. Nhưng bạn phải phát hiện ra khi họ đã tự mình bắt đầu.

Số lượng bạn cần là rất nhiều cho ứng dụng của bạn. Theo mặc định không có gì được bắt đầu. Giống như @demeshchuk Tôi cũng đã nghe nói rằng Riak thích có một hồ bơi chủ đề không đồng bộ lớn khi họ mở nhiều tệp. Lời khuyên duy nhất của tôi là thử và đo lường. Như với tất cả tối ưu hóa?

3

Theo mặc định, số lượng các chủ đề trong một chạy Erlang VM là bằng với số của bộ xử lý lõi logic (nếu bạn đang sử dụng SMP, tất nhiên).

Từ kinh nghiệm của tôi, việc tăng tham số + A có thể giúp cải thiện hiệu suất khi bạn có nhiều thao tác I/O tệp đồng thời. Và tôi nghi ngờ rằng việc tăng + A có thể làm tăng hiệu suất quy trình tổng thể, vì lịch trình của BEAM cực kỳ nhanh và được tối ưu hóa.

Nói về các con số chính xác - điều đó hoàn toàn phụ thuộc vào ứng dụng của bạn mà tôi nghĩ. Giả sử, trong trường hợp của Riak, nơi số lượng tệp mở tối đa ít nhiều có thể dự đoán được, bạn có thể đặt + A thành mức tối đa này hoặc nhiều lần nếu nó quá lớn (theo mặc định là 64, BTW). Nếu ứng dụng của bạn chứa, như hàng triệu tệp và bạn phân phối chúng cho các ứng dụng web - đó là một câu chuyện khác; rất có thể, bạn có thể muốn chạy một số điểm chuẩn với mã của riêng bạn và môi trường của riêng bạn.

Cuối cùng, tôi tin rằng tôi chưa bao giờ thấy + A hơn một trăm. Không có nghĩa là bạn không thể đặt nó, nhưng có khả năng không có điểm nào trong đó.

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