Obecnie jestem programistą C # z dość chwiejnym rozumieniem wątków.
Oba te linki zostały zasugerowane w innych postach:
http://www.yoda.arachsys.com/csharp/threads/
http://www.albahari.com/threading/
Czy powinienem wrócić do podstaw i może zajrzeć do niektórych tekstów informatyki na ten temat?
Naprawdę czuję, że jeśli wskoczę i użyję bibliotek c #, tak naprawdę nie będę miał solidnych podstaw wiedzy, na których można by budować. Myślę, że muszę nauczyć się tego tematu od zera jak studentka science fiction, a następnie użyć bibliotek C #.
Czy ktoś może zasugerować podejście do nauki wątków, może jakieś linki i / lub pomysły na projekty?
Z góry dziękuję!
Edytuj, dziękuję za wszystkie odpowiedzi. Niektórzy wspominali, że książka może być dobrym pomysłem, czy ktoś może ją zasugerować? Wolałbym coś agnostycznego z języka. Czy ktoś wie, w jakiej klasie byłyby omawiane te przedmioty na kierunku informatyka? Próbuję znaleźć w Google kilka darmowych notatek i zadań online.
Odpowiedzi:
Napisz wielowątkowy serwer WWW. Nauczysz się TON . I to nie tylko wątki.
źródło
Problem producenta i konsumenta jest klasycznym przykładem i pomaga zrozumieć nie tylko wątki, ale także planowanie procesorów (można to zademonstrować za pomocą fork () dla procesów potomnych w przeciwieństwie do wątków) oraz tego, w jaki sposób twoje programy współdziałają z systemem operacyjnym za nimi sceny.
Oto podsumowanie ważnych rzeczy, które powinieneś zrozumieć w zakresie wątków / rozwidlenia 1. Jak system operacyjny planuje zadania (na przykład algorytm Round Robin) 2. Blokowanie zasobów (Jeśli wiele wątków korzysta z tego samego zasobu, nie chcesz, aby mieć do nich dostęp w tym samym czasie - BAD THINGS HAPPEN)
Oto artykuł wiki na temat tego klasycznego problemu: http://en.wikipedia.org/wiki/Producer-consumer_problem
Zasadniczo utwórz „Producenta”, który odradza wątki „Konsumentów”. Producent wytwarza „zasób”, a konsumenci go konsumują. Umieść go w pętli i obserwuj, co się stanie (zdziwisz się, że ostatecznie konsumenci zużyją więcej zasobów niż są dostępne z powodu niezsynchronizowanych metod).
źródło
Wybierz jeden z klasycznych wysoce równoległych problemów. Bardziej interesujące może być wybranie takiego z super-liniowym przyspieszeniem.
Rozważ przeszukanie nieposortowanej i nieindeksowanej listy. Ten problem jest trywialnie równoległy. Najpierw zaimplementuj wyszukiwanie jednowątkowe, a następnie naiwne wyszukiwanie równoległe. Wdrożenie kradzieży pracy. Wygeneruj losowe zestawy danych i uruchom wszystkie trzy wersje na tych samych zestawach danych. Oblicz przyspieszenie.
źródło
Nie sądzę, żeby podręcznik był kolejnym najlepszym krokiem. Projekt jest do zrobienia. To powinno być coś, co Cię ekscytuje.
Za pierwszym razem, gdy robiłem wątki, poprawiałem wydajność przeszukiwacza sieci. Możesz czołgać się o wiele szybciej, jeśli nie wykonujesz całego sieciowego IO szeregowo. Jest to świetny projekt na początek, ponieważ można podejść do niego na kilka sposobów, ale nie jest to tak skomplikowane, jak, powiedzmy, wielowątkowe programowanie GUI. Nie wymaga również specjalistycznych umiejętności (na przykład ciężkich obliczeń).
Więc znajdź trochę informacji do zeskrobania i zacznij hakować. To nie powinno zająć dużo czasu, aby coś zacząć, będzie to delikatne wprowadzenie.
źródło
Modeluj prostą aplikację Szpieg kontra Szpieg.
Każdy szpieg działa w osobnym wątku.
Każdy szpieg może wyrządzić szkody drugiemu szpiegowi, ale nie bezpośrednio.
Każdy szpieg może ukraść cenne zasoby od drugiego szpiega, ale nie bezpośrednio.
Obaj szpiedzy mają do dyspozycji ograniczoną pulę zasobów i muszą je dzielić. Tylko jeden szpieg może korzystać z dowolnego zasobu jednocześnie.
źródło
Z góry mojej głowy: 4. wydanie książki Bruce'a Eckela „Myślenie w Javie” zawiera bardzo długi rozdział na temat wątków (> 100 stron - prawie sama książka). Przeczytałem starsze wydania książki, więc nie przeczytałem tego rozdziału; ale pamiętam jeden z jego postów na blogu (lub informacje o wydaniu jego książki), w którym twierdzi, że napisanie tego było bardzo trudne i ostatecznie było to dla niego prawdziwe osiągnięcie. Sprawdź to...
Oprócz tego na tym komercyjnym serwisie szkoleniowym znajduje się 2,5-godzinny kurs wideo, ale możesz uzyskać bezpłatną wersję próbną (musisz zostawić dane karty kredytowej, więc nie zapomnij zrezygnować z subskrypcji)
http://www.pluralsight-training.net/microsoft/olt/Course/Toc.aspx?n=clr-threading
źródło
To zawsze dobry wybór i polecam wybrać dobrą książkę do wątków, aby zapoznać się z wątkami. Nauczyłem się wielowątkowości w Javie i wiedza dość łatwo przełożyła się na C #.
Jeśli chcesz praktycznego przykładu, polecam spróbować problemu z filozofem kulinarnym .
Musisz nauczyć się kilku rzeczy, gdy zaczynasz korzystać z wielowątkowości:
W tej chwili nie mogę myśleć o innych rzeczach. Samouczek Albahari wygląda naprawdę dobrze!
źródło