Tôi lặp lại các thí nghiệm của CodeProject article on this topic và nhận thấy kết quả cho .NET 4 tương tự như được mô tả trong năm 2003. Lưu ý rằng bài viết không thực sự liệt kê các kết quả cho phần có vấn đề nhưng tôi hiểu nó chính vấn đề vẫn tồn tại.
Tôi đã sử dụng lại mã này từ bài viết CodeProject - chỉ cần tải xuống để chạy thử nghiệm này hoặc thử nghiệm.
Thử nghiệm sẽ cố gắng sử dụng 10 chuỗi song song để đếm cao nhất có thể trong 1 giây.
Sử dụng 10 đề nền (ví dụ new Thread()
)
T0 = 4451756
T1 = 4215159
T2 = 5449189
T3 = 6244135
T4 = 3297895
T5 = 5302370
T6 = 5256763
T7 = 3779166
T8 = 6309599
T9 = 6236041
Total = 50542073
Sử dụng hạng mục công trình 10 ThreadPool
T0 = 23335890
T1 = 20998989
T2 = 22920781
T3 = 9802624
T4 = 0
T5 = 0
T6 = 0
T7 = 0
T8 = 0
T9 = 0
Total = 77058284
Lưu ý rằng chỉ có 4 chủ đề công việc hồ bơi mặt hàng trong số 10 từng bị hành quyết trong lát thời gian 1 giây! Đây là trên một CPU quad-core, do đó, đó là một sợi cho mỗi lõi.Các nhiệm vụ khác được thực hiện sau khi hoàn thành bốn lệnh đầu tiên và do 1 giây được phân bổ đã hết hạn, chúng không tăng số đếm của chúng.
Kết luận ở đây: với các tác vụ dài, ThreadPool sẽ thực hiện một số tác vụ chờ phía sau những người khác! Vì vậy, tôi thực sự khuyên bạn không nên thực hiện bất kỳ xử lý lâu dài nào trong các tác vụ ThreadPool (chẳng hạn như các trình xử lý hoàn thành không đồng bộ). Nếu không, bạn có thể giữ các cuộc gọi không đồng bộ quan trọng hơn hoàn tất nếu xử lý dữ liệu của bạn đang hoán đổi CPU hoặc bạn có thể có hiệu năng rất không ổn định nếu chỉ một số tác vụ thực hiện nhiều thao tác.
Sử dụng thực hiện ThreadPool tùy chỉnh từ bài viết
T0 = 7175934
T1 = 6983639
T2 = 5306292
T3 = 5078502
T4 = 3279956
T5 = 8116320
T6 = 3262403
T7 = 7678457
T8 = 8946761
T9 = 8500619
Total = 64328883
tôi sẽ mong bạn hãy nhìn vào Rx (phần mở rộng Reactive) mà làm cho chương trình không đồng bộ một buổi tối đi dạo trong một công viên xinh đẹp! http://msdn.microsoft.com/en-us/devlabs/ee794896.aspx – gideon
Một số liên kết Rx hữu ích: http://rxwiki.wikidot.com/ Đây là mã nhỏ tôi đã viết để cập nhật không đồng bộ một hộp danh sách mỗi khi tôi nhập trong hộp văn bản và tăng tốc độ bằng 0,5 giây. Xem-> http://stackoverflow.com/questions/4655619/simple-rx-code-silently-fails-in-windows-forms-only-during-debugging-in-visual-st – gideon