Skip to content

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

Notifications You must be signed in to change notification settings

VladimirRepp/CS---Async-Parallel-Advanced

Repository files navigation

C#: Асинхронное и параллельное программирование

.NET C# License

Учебный репозиторий с практическими материалами по продвинутым темам C#: работа с унаследованным кодом, управление процессами, многопоточность, асинхронное программирование, синхронизация, параллельные вычисления и динамическая загрузка библиотек.

Содержание курса

Унаследованный код (Legacy Code) — код без тестов и документации с жесткими зависимостями и нарушением принципов SOLID.

Ключевые подходы:

  • Анализ — изучение кода без изменений
  • Рефакторинг — улучшение структуры без изменения поведения
  • Обеспечение тестируемости — основа для безопасных изменений
  • Методы работы:
    • Sprout Method/Class — добавление нового функционала в чистые методы
    • Wrap Method — оборачивание старых методов для добавления функциональности

Процесс — экземпляр выполняемой программы с изолированным окружением.

Основные сценарии:

  • Запуск внешних приложений
  • Мониторинг системных процессов
  • Взаимодействие с процессами (ввод/вывод)
  • Ожидание завершения процессов

Ключевой класс: System.Diagnostics.Process

Дополнительные материалы:

Поток (Thread) — наименьшая единица выполнения внутри процесса.

Асинхронность — освобождение потока во время операций ввода-вывода.

Ключевые концепции:

  • Thread, ThreadPool — управление потоками
  • Task, Task<T> — современная абстракция для асинхронных операций
  • async/await — упрощение асинхронного кода
  • I/O-bound vs CPU-bound операции:
    • I/O-bound (сеть, диск, БД) — идеально для async/await
    • CPU-bound (вычисления) — лучше использовать Task.Run

Дополнительные материалы:

Проблемы многопоточности:

  • Race Condition — состояние гонки
  • Deadlock — взаимная блокировка
  • Data Corruption — порча данных

Примитивы синхронизации:

  • lock (Monitor) — эксклюзивная блокировка
  • Mutex — межпроцессная блокировка
  • SemaphoreSlim — ограничение одновременного доступа
  • ManualResetEventSlim / AutoResetEvent — уведомления между потоками
  • ReaderWriterLockSlim — множественное чтение, эксклюзивная запись

Важные правила:

  • Минимизируйте объем кода в критических секциях
  • Используйте неизменяемые структуры
  • Никогда не блокируйте поток в async методе (кроме await)

Дополнительные материалы:

Параллельное программирование — использование нескольких ядер CPU для одновременного выполнения задач.

Ключевые технологии:

  • Parallel классFor, ForEach, Invoke
  • PLINQAsParallel() для LINQ-запросов
  • TPL (Task Parallel Library)Task, Task<T>, TaskFactory

Отличие от многопоточности:

  • Многопоточность — асинхронность и освобождение потоков при I/O
  • Параллелизм — использование нескольких ядер для CPU-bound задач

Концепции:

  • Степень параллелизма
  • Разделение данных между потоками
  • Агрегация результатов

Дополнительные материалы:

Динамическая загрузка — загрузка сборок во время выполнения.

Ключевые классы:

  • Assembly — загруженная сборка
  • Type — представление типа
  • Activator — создание экземпляров
  • MethodInfo — информация о методах

Сценарии использования:

  • Плагинная архитектура
  • Загрузка реализаций по конфигурации
  • "Горячая" замена модулей

Дополнительные материалы:

Быстрый старт

Предварительные требования

Запуск примеров

  • здесь приведены примеры кода для решения задач
  • задачи описаны в исходном файле кода
  • для запуска кода потребуется создать новый проект в IDE или редакторе кода с .Net

Заметки по выпуску

  • Module 6 на этапе тестирования

About

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

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages