Многопоточные приложения (.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».