Рекомендации по упражнениям, которые помогут изучить многопоточность в С#
Я хочу получить хорошее представление о многопоточности в С#. Я прочитал некоторые статьи, такие как учебники Джозефа Альбахари, которые объясняют понятия, но, как вы знаете, независимо от того, насколько вы читаете, большая часть этого становится мусором, если вы не практикуете. Мне нужно что-то, что имеет поучительные и прагматические примеры кода, связанные с практикой реальной жизни, а не некоторые примеры, которые печатают некоторые строки. Есть ли у вас какие-либо предложения?
Ответы
Ответ 1
Ребята, ребята, я думаю, что нашел хороший сайт: planet-source-code.com. Поиск в .Net-кодах с ключевым словом "thread", кажется, возвращает несколько хороших примеров, например
- синхронизация с несколькими потоковыми папками
- многопоточный сервер TCP
- загрузчик фонового файла
- асинхронной. Гнездо
- Обмен файлами P2P
- простая проверка почты POP3 и многое другое!
яй!
Ответ 2
Какой-то случайный хруст числа является хорошим испытанием для этого. Я научил себя нарезанию резьбы, написав простой поисковик чисел, затем разбив свои "поисковые" номера на блоки и используя поток для работы через каждый.
Это позволяет мне устанавливать некоторые переменные на размер блока, количество используемых потоков, время ожидания между потоками запуска и т.д., чтобы проверить, как каждое из них влияет на производительность.
Ответ 3
Если вы делаете какие-либо разработки winforms или wpf, вы быстро столкнетесь с проблемами при попытке сделать "материал" в потоке пользовательского интерфейса.
Скажем, вам нужно прочитать и проанализировать содержимое большого (2 ГБ) XML файла. Если работа была выполнена в потоке пользовательского интерфейса, интерфейс зависает, пока работа не будет завершена. И наоборот, если вы правильно выполняли работу в рабочем потоке, вы могли бы поддерживать пользовательский интерфейс с помощью обмена сообщениями и позволить пользователю узнать, что вы сейчас делаете (строка состояния (ugh)) или отображать в тексте, что вы "Чтение XML" и т.д.)
Хорошим простым примером было бы сделать пример приложения и заставить его сфокусировать BackgroundWorker для обработки некоторой произвольной работы в фоновом режиме (это может быть даже Thread.Sleep(10000) или что-то тривиальное.)
Я бы сказал, что это одна из многих хороших отправных точек в этом вопросе.
http://msdn.microsoft.com/en-us/library/cc221403%28VS.95%29.aspx
Ответ 4
В этом сайте есть несколько примеров приложений, которые, как я думаю, будут применяться для приложений с практической практикой. Однако, похоже, что ссылки на исходный код нарушены. Тем не менее, я считаю, что представленные приложения представляют собой очень практические примеры. Некоторые из них включают:
- Поиск рабочего стола
- Менеджер загрузки
- FTP-клиент
- Сжатие файлов
- Несколько RSS-каналов