2010-01-28 37 views
32

Tôi đang học Đa luồng tại thời điểm này, trong C#, nhưng như với tất cả việc học tôi thích học các phương pháp hay nhất. Tại thời điểm này khu vực có vẻ mờ. Tôi hiểu những điều cơ bản và tôi có thể tạo chủ đề.Đa luồng

Tôi nên tìm hiểu điều gì khi tạo các ứng dụng đa luồng. Có bất kỳ quy tắc hay thực hành tốt nhất nào mà tôi nên biết không? Hoặc bất cứ điều gì cần nhớ để tránh trượt lên xuống dòng?

Cảm ơn bạn đã trả lời.

+1

Nếu bạn đang sử dụng C# thì bạn nên cân nhắc sử dụng Thư viện song song tác vụ. Nó cho phép bạn suy nghĩ về nhiệm vụ và rào cản hơn là chủ đề và khóa. Nó cải thiện sự trừu tượng. –

+0

@Ade Miller: Đây là lời khuyên tuyệt vời - tôi sẽ thêm rằng bạn có thể sử dụng TPL và PLINQ trong .Net3.5, quá, bằng cách cài đặt phần mở rộng phản ứng: http://msdn.microsoft.com/en-us/ devlabs/ee794896.aspx –

Trả lời

33

Ngoài các MSDN Best Practices, tôi sẽ thêm:

  1. Đừng tạo chủ đề của riêng bạn. Thích sử dụng ThreadPool (hoặc Task Parallel Library Nhiệm vụ mới). Quản lý chủ đề của riêng bạn hiếm khi, nếu có, quyết định thiết kế chính xác.
  2. Hãy cẩn thận hơn với các sự cố liên quan đến giao diện người dùng. Control.Invoke (Windows Forms) và Dispatcher.Invoke (WPF) hoặc sử dụng SynchronizationContext. Hiện tại với bài đăng/Gửi
  3. Ưu tiên sử dụng BackgroundWorker class khi thích hợp.
  4. Cố gắng giữ đồng bộ hóa thông qua ổ khóa ở mức tối thiểu
  5. Hãy chắc chắn để đồng bộ hóa tất cả mọi thứ mà đòi hỏi đồng bộ
  6. Favor các phương pháp trong Interlocked class khi có thể qua khóa

Khi bạn được nâng cao hơn, và cố gắng tối ưu hóa, những thứ khác cần tìm kiếm:

  1. Xem ra cho false sharing. Điều này đặc biệt có vấn đề khi làm việc với các mảng, vì mọi mảng ghi vào bất kỳ phần tử nào trong một mảng bao gồm một kiểm tra giới hạn trong .NET, có hiệu lực khiến một truy cập trên mảng gần phần tử 0 (ngay trước phần tử 0 trong bộ nhớ). Điều này có thể gây ra sự hoàn hảo. để đi xuống dốc đáng kể.
  2. Hãy coi chừng các vấn đề về đóng cửa, đặc biệt là khi làm việc trong các tình huống lặp. Nasty lỗi có thể xảy ra nếu bạn đang đóng trên một biến trong phạm vi sai khi thực hiện một đại biểu.
9

MSDN - Managed Threading Best Practices

Đó MSDN Điều làm một công việc thực sự tốt tại chạm vào khu vực nguy hiểm và đưa ra các thực hành tốt nhất để quản lý/làm việc xung quanh những vùng đó.

2

Có những điều bạn nên biết không? Chắc chắn.

nguy hiểm:

Một hữu ích và bài viết thú vị có thể tìm thấy here

2

Tôi khuyên bạn nên bắt đầu bằng cách tiêu hóa thông tin này: http://www.albahari.com/threading/.

+0

Thật tuyệt khi bạn mang nó lên. Tôi đã in 80 trang PDF đó và tôi sẽ đọc qua nó ngay bây giờ. –