1. Конкурентность и параллелизм | Параллельное программирование

Лекция посвящена введению в курс *параллельного программирования**, с акцентом на понятия **конкурентности* и **параллелизма**. --- Конкурентность vs Параллелизм *Конкурентность* — это способность выполнять несколько задач поочередно, даже если они выполняются на одном ядре. *Параллелизм* — это одновременное выполнение задач на нескольких ядрах или процессорах. Эти термины часто путают, особенно в переводчиках, но в англоязычной литературе они имеют разные значения. Многозадачность и виды её реализации *Кооперативная* — потоки сами передают управление. *Вытесняющая* — операционная система принудительно переключает потоки, что позволяет избежать зависания системы. В современных ОС используется вытесняющая многозадачность. Цели использования конкурентности *Разделение ответственности* — разные потоки выполняют разные задачи (например, рисование UI и загрузка данных). *Улучшение отзывчивости* — фоновые задачи не мешают главному потоку (особенно важно для мобильных приложений). *Повышение производительности* — использование всех возможностей многопроцессорных систем. Многопоточность и многопроцессность *Многопроцессность* — процессы изолированы, но тяжеловесны. Хороши для масштабирования и отказоустойчивости. *Многопоточность* — потоки легче, быстрее создаются, общаются между собой напрямую. Но требуют аккуратной работы с памятью. Векторизация и SIMD Использование специальных инструкций процессора для одновременных операций над несколькими данными. Ускорение вычислений, особенно при работе с массивами. Может применяться автоматически компилятором или вручную с помощью intrinsic-ов. GPU и распределённые вычисления Графические процессоры с тысячами ядер подходят для параллельных вычислений (рендеринг, моделирование, майнинг и т.д.). Распределённые системы позволяют решать крупные задачи, распределяя их на множество компьютеров. Закон Мура и его ограничения Увеличение количества транзисторов на чипе не даёт бесконечного роста производительности из-за физических ограничений. Развитие параллельных вычислений становится ключевым для повышения эффективности программ. Виды параллелизма *Параллелизм задач* — параллельное выполнение разных частей алгоритма. *Параллелизм данных* — однотипные операции над разными данными. Ограничения конкурентности Усложнение кода. Накладные расходы на переключение потоков. Риск ошибок, связанных с гонкой данных. Неэффективность при небольших задачах или недостаточном количестве ядер. Практические примеры Видеоплеер с несколькими потоками: UI, аудио, видео, загрузка. Веб-серверы, компиляторы, рендеринг 3D-графики — всё это использует конкурентность и параллелизм. --- 📌 Вывод Конкурентность и параллелизм — это мощные инструменты, которые позволяют создавать эффективные, отзывчивые и масштабируемые приложения. Однако их применение требует понимания, как работают потоки, процессы, память и аппаратные средства. Эта лекция — введение в основы, на основе которой будет строиться дальнейший курс параллельного программирования. Практические задания и примеры кода доступны на моем гитхабе:
Тайм-коды: 0:00 Конкурентность и параллелизм 11:54 Подходы к конкурентности 16:14 Многопроцессность 19:08 Многопоточность 20:39 Векторизация 27:47 Параллельные вычисления на GPU 29:34 Когда использовать и когда не использовать конкурентность 40:40 Заключение Чтобы оставаться на связи в условиях блокировки Youtube в России подписывайтесь на мой Telegram-канал
В заставке использована композиция "Папа может в Си" музыкального коллектива "Научно-технический рэп" (https://vk.com/nii_rap)
Исходный код шейдера из финальной заставки:

Смотрите также