G
enby!

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

Лекция посвящена введению в курс *параллельного программирования**, с акцентом на понятия **конкурентности* и **параллелизма**. --- Конкурентность vs Параллелизм *Конкурентность* — это способность выполнять несколько задач поочередно, даже если они выполняются на одном ядре. *Параллелизм* — это одновременное выполнение задач на нескольких ядрах или процессорах. Эти термины часто путают, особенно в переводчиках, но в англоязычной литературе они имеют разные значения. Многозадачность и виды её реализации *Кооперативная* — потоки сами передают управление. *Вытесняющая* — операционная система принудительно переключает потоки, что позволяет избежать зависания системы. В современных ОС используется вытесняющая многозадачность. Цели использования конкурентности *Разделение ответственности* — разные потоки выполняют разные задачи (например, рисование UI и загрузка данных). *Улучшение отзывчивости* — фоновые задачи не мешают главному потоку (особенно важно для мобильных приложений). *Повышение производительности* — использование всех возможностей многопроцессорных систем. Многопоточность и многопроцессность *Многопроцессность* — процессы изолированы, но тяжеловесны. Хороши для масштабирования и отказоустойчивости. *Многопоточность* — потоки легче, быстрее создаются, общаются между собой напрямую. Но требуют аккуратной работы с памятью. Векторизация и SIMD Использование специальных инструкций процессора для одновременных операций над несколькими данными. Ускорение вычислений, особенно при работе с массивами. Может применяться автоматически компилятором или вручную с помощью intrinsic-ов. GPU и распределённые вычисления Графические процессоры с тысячами ядер подходят для параллельных вычислений (рендеринг, моделирование, майнинг и т.д.). Распределённые системы позволяют решать крупные задачи, распределяя их на множество компьютеров. Закон Мура и его ограничения Увеличение количества транзисторов на чипе не даёт бесконечного роста производительности из-за физических ограничений. Развитие параллельных вычислений становится ключевым для повышения эффективности программ. Виды параллелизма *Параллелизм задач* — параллельное выполнение разных частей алгоритма. *Параллелизм данных* — однотипные операции над разными данными. Ограничения конкурентности Усложнение кода. Накладные расходы на переключение потоков. Риск ошибок, связанных с гонкой данных. Неэффективность при небольших задачах или недостаточном количестве ядер. Практические примеры Видеоплеер с несколькими потоками: UI, аудио, видео, загрузка. Веб-серверы, компиляторы, рендеринг 3D-графики — всё это использует конкурентность и параллелизм. ---

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