28

Có ai biết nếu có bất kỳ thư viện chứa không có khóa nào có sẵn cho .NET không?Khóa ngăn xếp và xếp hàng miễn phí trong C#

Tốt hơn là một cái gì đó được chứng minh là hoạt động và nhanh hơn các trình bao bọc đồng bộ hóa mà chúng tôi có trong .NET.

Tôi đã tìm thấy một số bài viết trên .NET, nhưng không ai trong số họ chỉ định bất kỳ điểm chuẩn tốc độ nào, cũng như không truyền cảm hứng cho sự tin cậy của họ.

Cảm ơn

+3

Vui lòng theo dõi và đăng bất kỳ dữ liệu liên quan đến hiệu suất nào mà bạn có thể đã tìm thấy trên cấu trúc khóa miễn phí mà bạn có thể đã thử nghiệm. –

+2

Chúng tôi đã kết thúc việc chuyển các thùng chứa riêng của chúng tôi, largelly dựa trên http://www.boyet.com/index.html. Sử dụng các thùng chứa không có khóa so với tiêu chuẩn, chúng tôi đã giảm khoảng ~ 12% tổng thời gian cần thiết để xử lý lô mẫu của chúng tôi. Tất cả trong tất cả tôi sẽ nói nó không phải là giá trị nỗ lực :-( – Radu094

+1

Tôi đã xem qua [Ariadne] (http://hackcraft.github.io/Ariadne/) có những điều này.Tôi đang gặp khó khăn trong việc hiểu mã mặc dù. Nó có một số câu hỏi trống rỗng cho các câu lệnh như 'for (;;) {... some code ...}' và nó sẽ có một câu lệnh trả về bên trong. Nó có một chú thích ở trên cùng cho biết: "Hàng đợi này chủ yếu là cho hoàn thành hoặc để sử dụng trong các lớp khác trong thư viện, xem xét rằng 4.0 FCL đã có một hàng đợi khóa.Thực hiện Mono là rất gần với điều này, trong khi thực hiện MS là phức tạp hơn nhưng nên cung cấp tốt hơn sử dụng bộ nhớ cache CPU .. " –

Trả lời

15

muộn, nhưng tốt hơn bao giờ tôi nghĩ rằng tôi sẽ thêm các bài viết của Julian Bucknalls vào danh sách này.

Nhưng anh ấy không có số hiệu suất. Trong thử nghiệm của tôi về cấu trúc của mình, danh sách được chia tỷ lệ so với khóa (sử dụng hạt nhân rất thấp so với ReaderWriterLock).

Blog của anh ấy có một loạt bài viết về cấu trúc không khóa trong C#.

LOCK-FREE DATA STRUCTURES: THE STACK

+0

Sử dụng hạt nhân không liên quan gì đến CAS mà anh ta đang sử dụng. CAS là một cái búa nặng nhưng trong CLR bạn khá nhiều không có nhiều lựa chọn, cho bây giờ. –

+0

CAS là ánh sáng trên hạt nhân thời gian so với ReaderWriterLock. So sánh hai trong vòng lặp. Một sẽ sử dụng tất cả thời gian không gian người dùng, thời gian hạt nhân khác. –

+1

Bạn thực sự không thể thực hiện ngăn xếp không có khóa, trừ khi bạn biết, một ưu tiên, rằng các thành phần của bạn sẽ không bị xóa. C# Tôi tin rằng bộ sưu tập rác (mà lấy đi một số điểm của việc sử dụng khóa-miễn phí!) Vì vậy, bạn nhận được ngay với nó. Nhưng trong C, tôi tin rằng ngăn xếp bị hỏng, với lỗi bình thường trong pop. –

11

Bạn có nghĩa là các lớp container như chúng tồn tại trong khuôn khổ PFX (Parallels cho .NET), ConcurrentQueue & ConcurrentStack

Pfx blog

+0

PFX có vẻ tốt, nhưng tài liệu dường như ngụ ý rằng ConcurrentQueue và ConcurrentStack sử dụng khóa để cung cấp an toàn cho luồng – Radu094

+0

Tôi muốn tránh PFX bằng mọi giá. Chúng tôi đã thấy một sự suy thoái 8 lần (đúng) trước khi nhận ra nó thực sự sẽ không cung cấp cho bạn bất cứ điều gì một cuốn sách hay sẽ không dạy bạn làm tốt hơn .. –

+0

@ Radu094: Sách của Joe Duffy "Lập trình đồng thời trên Windows" nói rằng 'ConcurrentQueue' hiện đang khóa miễn phí. @ rama-jka toti: Những thứ trong .NET 4 tốt hơn nhiều so với CTP nhưng tôi chưa thử nghiệm cấu trúc dữ liệu miễn phí khóa chống lại các lựa chọn thay thế. Họ vẫn còn chậm hơn nhiều so với các đối tác không an toàn luồng của họ, tất nhiên. –

-4

Khóa cấu trúc dữ liệu miễn phí sẽ có vấn đề cho đến khi họ thay đổi CLR với sự lộn xộn gây ra bởi mô hình bộ nhớ, xem spec CLI.

Lập trình không khóa là đủ khó khăn mà bạn không nên bận tâm với nó trên một bộ sưu tập (container) cấp btw. Đúng cho bất kỳ ngôn ngữ nào ở ngoài đó ..

+3

Bạn có thể xây dựng trên "sửa đổi CLR" không? Bạn nghĩ gì là sai? –

1

Không biết gì về nó, có một thư viện mà tôi gặp phải trên here.

Mặc dù có lẽ không hoàn toàn là những gì bạn đang tìm kiếm, ít nhất có một triển khai và thảo luận về StackOverflow của lock free queue structure in C# here. Đi qua quy trình xem xét mã StackOverflow có thể cung cấp cho một số sự tự tin về sự an toàn của nó hoặc cung cấp thông tin về cách tự mình xây dựng các thùng chứa không có khóa của bạn.