Я в настоящее время разработчик C # с довольно шатким пониманием потоков.
Обе эти ссылки были предложены в других сообщениях:
http://www.yoda.arachsys.com/csharp/threads/
http://www.albahari.com/threading/
Должен ли я вернуться к основам и, возможно, взглянуть на некоторые компьютерные тексты по этому вопросу?
Я действительно чувствую, что если я прыгну и использую библиотеки c #, у меня не будет прочной основы знаний, на которых можно будет опираться. Я думаю, что мне нужно выучить этот предмет с нуля, как студент-студент, а затем использовать библиотеки C #.
Может кто-нибудь предложить подход к изучению потоков, может быть, некоторые ссылки и / или идеи проекта?
Заранее спасибо!
Редактировать, спасибо за все ответы. Некоторые люди упоминали, что книга может быть хорошей идеей, может кто-нибудь предложить? Я бы предпочел что-то не зависящее от языка. Кто-нибудь знает, к какому классу будет относиться этот материал в области компьютерных наук? Я пытаюсь найти в Google бесплатные онлайн заметки и задания.
Ответы:
Написать многопоточный веб-сервер. Вы выучите тонну . И не только о потоке.
источник
Проблема «производитель-потребитель» является классическим примером и помогает понять не только многопоточность, но и планирование процессора (это можно продемонстрировать с помощью fork () для дочерних процессов, а не потоков) и то, как ваши программы взаимодействуют с операционной системой, стоящей за сцены.
Вот краткое изложение важных вещей, которые вы должны понимать в отношении потоков / разветвления 1. Как операционная система планирует задачи (например, алгоритм циклического перебора) 2. Блокировка ресурсов (если несколько потоков используют один и тот же ресурс, вы не хотите, чтобы они быть доступным к ним в одно и то же время
Вот статья в вики по этой классической проблеме: http://en.wikipedia.org/wiki/Producer-consumer_problem
По сути, создайте «Producer», который порождает темы «Consumers». Производитель производит «ресурс», а потребители его потребляют. Поместите это в цикл и посмотрите, что произойдет (вы будете удивлены, что в конечном итоге потребители будут потреблять больше ресурсов, чем доступно из-за несинхронизированных методов).
источник
Выберите одну из классических высокопараллельных задач. Возможно, вам будет интереснее выбрать один с суперлинейным ускорением.
Попробуйте поискать в несортированном и неиндексированном списке. Эта проблема тривиально параллельна. Сначала реализуйте однопоточный поиск, затем наивный параллельный поиск. Реализовать работу-воровство. Создайте несколько случайных наборов данных и запустите все три версии на тех же наборах данных. Рассчитайте ускорение.
источник
Я не думаю, что учебник - следующий лучший шаг. Проект - это путь. Это должно быть чем-то, что вас волнует.
В первый раз, когда я занялся многопоточностью, я улучшил производительность веб-сканера. Вы можете сканировать намного быстрее, если вы не выполняете все операции сетевого ввода-вывода в последовательном режиме. Это отличный проект для начала, потому что вы можете подойти к нему довольно многими способами, но он не так сложен, как, скажем, многопоточное программирование с графическим интерфейсом. Это также не требует особых специализированных навыков (например, тяжелые вычислительные вещи).
Таким образом, выяснить некоторую информацию, чтобы очистить и начать взлом. Это не займет у вас много времени, чтобы начать что-то, это будет мягкое введение.
источник
Смоделируйте простое приложение Spy vs. Spy.
Каждый шпион работает в отдельном потоке.
Каждый шпион может нанести урон другому шпиону, но не напрямую.
Каждый шпион может украсть ценные ресурсы у другого шпиона, но не напрямую.
Оба шпиона имеют в своем распоряжении ограниченный пул ресурсов и должны делиться ими. Только один шпион может использовать любой данный ресурс одновременно.
источник
Сверху головы: в 4-м издании книги Брюса Экеля «Мышление на Java» есть очень длинная глава о потоке (> 100 страниц - почти маленькая книга сама по себе). Я читал старые издания книги и поэтому не читал эту главу; но я помню одно из его сообщений в блоге (или заметки о выпуске его книги), где он утверждает, что написать это было очень сложно, и в конце концов это было для него настоящим достижением. Проверьте это ...
Помимо этого, на этом коммерческом учебном сайте есть этот 2,5-часовой видеокурс, но вы можете получить бесплатную пробную версию (необходимо оставить данные кредитной карты; не забывайте отписываться)
http://www.pluralsight-training.net/microsoft/olt/Course/Toc.aspx?n=clr-threading
источник
Это всегда хороший выбор, и я бы порекомендовал вам выбрать хорошую книгу по потокам, чтобы ознакомиться с потоками. Я изучил многопоточность в Java, и эти знания довольно легко перешли на C #.
Если вам нужен практический пример, то я бы порекомендовал вам попробовать проблему философов-столовых .
Вам нужно научиться нескольким вещам, когда вы попадаете в многопоточность:
Я не могу думать о других вещах в данный момент. Учебник Albahari выглядит действительно хорошо!
источник