2010-01-28 18 views
32

W tej chwili uczę się wielu wątków, w języku C#, ale tak jak w przypadku całej nauki lubię uczyć się najlepszych praktyk. W tej chwili obszar wydaje się niewyraźny. Rozumiem podstawy i mogę tworzyć wątki.Multi Threading

Na co powinienem zwrócić uwagę przy tworzeniu aplikacji z wieloma gwintami. Czy są jakieś ustalone reguły lub najlepsze praktyki, o których powinienem wiedzieć? Albo cokolwiek do zapamiętania, aby uniknąć przeskoków w dół?

Dzięki za odpowiedzi.

+1

Jeśli używasz C#, powinieneś rozważyć użycie zadania Parallel Library. Pozwala myśleć o zadaniach i barierach, a nie o wątkach i blokadach. Poprawia abstrakcję. –

+0

@Ade Miller: To świetna rada - dodam, że możesz używać TPL i PLINQ również w .Net3.5, instalując rozszerzenia reaktywne: http://msdn.microsoft.com/en-us/ devlabs/ee794896.aspx –

Odpowiedz

33

Oprócz MSDN Best Practices, dodam:

  1. Nie twórz własnych wątków. Wolisz używać ThreadPool (lub nowych zadań Task Parallel Library). Zarządzanie własną nicią rzadko, jeśli w ogóle, jest właściwą decyzją projektową.
  2. Należy zachować szczególną ostrożność w przypadku problemów z interfejsem użytkownika. Control.Invoke (Windows Forms) i Dispatcher.Invoke (WPF) lub użyj SynchronizationContext. Bieżąco z opcją Wyślij/wyślij
  3. Przysługuj przy użyciu BackgroundWorker class, gdy jest to odpowiednie.
  4. Spróbuj utrzymać synchronizację poprzez zamki do minimum
  5. Upewnij się, aby zsynchronizować wszystko, co wymaga synchronizacji
  6. korzyść metod w Interlocked class kiedy możliwe ponad blokowania

Gdy pojawi się bardziej zaawansowane, a są próbując zoptymalizować, inne rzeczy do wyszukania:

  1. Uważaj na false sharing. Jest to szczególnie problematyczne w przypadku pracy z tablicami, ponieważ każda tablica zapisu do każdego elementu w tablicy obejmuje sprawdzanie bounds w .NET, co w efekcie powoduje dostęp na tablicy koło elemencie 0 (tuż przed elemencie 0 w pamięci). To może spowodować perf. do zjeżdżamy dramatycznie.
  2. Strzeż kwestii zamknięcia, szczególnie podczas pracy w sytuacjach pętli. Paskudne błędy mogą wystąpić, jeśli jesteś zamknięcia na zmiennej w niewłaściwym zakresie przy podejmowaniu delegata.
2

Czy są rzeczy, o których powinieneś wiedzieć? Oczywiście.

Niebezpieczeństwa:

Przydatne i ciekawy artykuł można znaleźć here

2

Gorąco polecam, aby rozpocząć od trawienia tego: http://www.albahari.com/threading/.

+0

Dobrze, że to przyniosłeś. Wydrukowałem ten 80-stronicowy plik PDF i zamierzam go przez to przejść. –