Персональные инструменты
 

Многопоточные приложения (.Net, Windows) (семинар 2011-11-08)

Материал из CustisWiki

Перейти к: навигация, поиск
Ведущий
Дутиков Михаил
Дата
ноябрь 2011

Аннотация

Разработка многопоточных приложений на .Net под Windows: основы

Многопоточные приложения и машины с многоядерными процессорами повсюду. Уметь писать многопоточные приложения сегодня крайне важно, будь вы server-side программист или разработчик desktop-приложений.

На этом (вводном в предмет) семинаре мы поговорим о том, как Windows управляет ресурсами процессоров, чтобы делать ту кучу всего, что она делает. Поговорим о системе приоритетов и о том, как она работает. Поглядим на кванты, потоки, переключения контекста.

Затем перейдем со стороны операционной системы на сторону .Net и посмотрим на те вещи (местами страшные), которые торчат в сторону разработчиков .Net. Научимся организовывать взаимодействие потоков так, чтобы оно было корректным и эффективным (вопросов оптимизации и масштабируемости коснемся лишь слегка -- предмет отдельного разговора): тут покопаемся в примитивах синхронизации, некоторые вскроем.

Разберем некоторые важные сценарии использования потоков. В том числе и вопрос -- создавать потоки явно или использовать пул? Немного покопаемся в пуле и поглядим на задачи, которые он облегчает. Посмотрим, чем он хорош и плох.

Отдельно (краем глаза) поглядим на то, какие архитектурные паттерны существуют в области многопоточного программирования. В основном на те, что касаются создания потокобезопасного кода. Остановимся на уровне классов.

Краткое содержание (по темам):

  • Потоки в Windows, кванты, приоритеты, переключения контекста, планировщик.
  • Потоки в .Net. Явное создание и взаимодействие.
  • Архитектура многопоточных приложений (уровень классов). Управление состоянием. Изоляция, неизменяемость, синхронизация.
  • Синхронизация: объекты ядра, пользовательского режима, гибриды. Сценарии использования.
  • Потокобезопасный код.
  • Пул потоков.
  • Таймеры.
  • Исключения.


Исходники -- Файл:MultithreadingSeminar1.zip.

Слайды -- Файл:Multithreading.Seminar1.pptx.

Материалы

Неточности, допущенные автором в этом семинаре, будут исправлены в следующем (см. Многопоточные приложения (.Net, Windows) (часть вторая) (семинар 2012-06-19)).

В частности, будет уточнение насчет инкремента и машинного кода, производимого JIT-компилятором (и сопоставления программы одному ядру процессора). Будет уточнение насчет старого ReaderWriterLock — к дедлокам все же он не приводит.

Еще будет уточнение насчет брошенных мьютекстов: система следит за ними менее пристально, чем утверждает автор в этом семинаре. Будут и другие, менее значительные уточнения.


Любые правки этой статьи будут перезаписаны при следующем сеансе репликации. Если у вас есть серьезное замечание по тексту статьи, запишите его в раздел «discussion».

Репликация: База Знаний «Заказных Информ Систем» → «Многопоточные приложения (.Net, Windows) (семинар 2011-11-08)»