Gần đây tôi đã đánh giá bộ thu gom rác .NET 4, phân bổ mạnh mẽ từ nhiều luồng. Khi các giá trị được phân bổ được ghi lại trong một mảng, tôi quan sát thấy không có khả năng mở rộng giống như tôi đã mong đợi (vì hệ thống cho phép truy cập đồng bộ vào một thế hệ cũ được chia sẻ). Tuy nhiên, khi các giá trị được phân bổ đã được loại bỏ ngay lập tức, tôi đã sợ hãi khi quan sát không có khả năng mở rộng sau đó!Khả năng mở rộng của bộ thu gom rác .NET 4
Tôi đã dự kiến trường hợp tạm thời để chia tỷ lệ gần như tuyến tính bởi vì mỗi luồng chỉ cần xóa sạch gen0 sạch và bắt đầu lại mà không tranh giành bất kỳ tài nguyên được chia sẻ nào (không có gì tồn tại cho thế hệ cũ và không có bộ nhớ cache L2 nhớ vì gen0 dễ dàng khớp với L1 cache).
Ví dụ, this MSDN article says:
phân bổ đồng bộ hóa miễn Trên một hệ thống đa xử, thế hệ 0 của heap quản lý được chia thành nhiều đấu trường bộ nhớ sử dụng một đấu trường cho mỗi thread. Điều này cho phép nhiều chủ đề để thực hiện phân bổ đồng thời để truy cập độc quyền vào heap là không cần thiết.
Ai đó có thể xác minh các phát hiện của tôi và/hoặc giải thích sự khác biệt này giữa các dự đoán và quan sát của tôi không?
Xác định ý bạn là "không có khả năng mở rộng". –
bạn nên đăng phương pháp chính xác của mình, những gì bạn đã đo lường, cách bạn đo lường và đo lường giá trị. –
Tôi đoán ở đây, nhưng tôi có lẽ Jon Harrop đã chạy thử nghiệm của mình trên một máy tính N-core và làm điểm chuẩn của mình với từ n = 1 đến N chủ đề. Tỷ lệ là sau đó tốc độ điểm chuẩn thay đổi như thế nào với n. –