2013-01-01 36 views
10

Tôi phải triển khai thuật toán chuẩn một người tiêu dùng một nhà sản xuất. Tôi có thể thực hiện nó bằng cách sử dụng Queue và vài câu lệnh lock dễ dàng. Hoặc tôi chỉ có thể sử dụng ConcurrentQueue. Điều gì là tốt hơn?hiệu suất của ConcurrentQueue vs Queue + lock

Nếu sử dụng Queue + lock thì tôi có thể tối ưu hóa "nhiều lần thêm/truy xuất lại", vì tôi có thể lock một lần và sau đó Add nhiều lần.

Điều gì sẽ nhanh hơn trong trường hợp chung - ConcurrentQueue hoặc Queue + lock và mức chênh lệch là bao nhiêu? Tất nhiên ConcurrentQueue là cách chuyển tiếp thẳng thắn nhất nhưng tôi không muốn mất rất nhiều hiệu suất như tôi đang sử dụng điều này trong ứng dụng giao dịch HFT.

+0

Trước tiên, hiệu suất có liên quan đến số CPU. Rất khó để đánh giá hiệu suất của ứng dụng đa luồng trong một số chế độ trừu tượng. – user1929959

+7

Điều gì về đo lường trong môi trường của bạn? Tôi có thể cung cấp cho bạn những con số chứng minh bất cứ điều gì bạn muốn trên máy tính của tôi. –

Trả lời

19

Từ C# in a Nutshell:

Các đồng thời ngăn xếp, hàng đợi lớp học, và túi được thực hiện nội bộ với danh sách liên kết. Điều này khiến chúng kém hiệu quả bộ nhớ so với các lớp không độc lập StackQueue, nhưng tốt hơn cho việc truy cập đồng thời vì danh sách được liên kết dẫn đến không có khóa hoặc triển khai khóa thấp.

Nói cách khác, thật khó để xác định trường hợp chung, chưa kể dự đoán sự khác biệt về hiệu suất sẽ là gì.

Tùy thuộc vào kích thước của bộ sưu tập và mức sử dụng. Hiệu suất có thể được dự kiến ​​là tốt hơn cho đủ truy cập đồng thời, tiêu thụ bộ nhớ sẽ tồi tệ hơn.

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