В этом видео мы разбираем 4 способа как быстро и без багов распараллелить вашу программу на все ядра вашего процессора с примерами на C . Разбираем такие вещи, как thread, mutex, lock_guard, unique_lock, atomic, condition_variable.
Материалы лекции:
Тайм-коды:
00:00:00 Введение и мотивация
00:14:20 Ядра и треды в процессоре
00:18:20 Гипертрединг в Интел
00:20:00 Основная идея распараллеливания
00:21:50 Вопрос про многопоточность и асинхронность
00:23:20 Пишем пример 1: многопоточный “Hello, world!“
00:29:30 Вопрос про thread::join
00:32:25 Вопрос про мотивацию
00:34:30 Вопрос: что будет, если сделать thread::join в основном цикле
00:38:20 Идентификаторы тредов
00:40:25 Усыпляем thread с this_thread::sleep_for
00:42:10 Создаём константные переменные внутри потока
00:44:30 Распараллеливаем программу, обрабатывая вектор из входных данных
00:49:20 Пишем пример 2: многопоточная факторизация на подотрезках
01:00:30 Считаем, сколько действий выполнил каждый поток перед тем, как умер
01:03:30 Область видимости переменных внутри потока и за его пределами
01:06:10 Что такое Data Race: простые примеры
01:13:46 Фиксим data races при помощи mutex: lock/unlock
01:26:25 Другой способ распараллеливания: блокирующая обработка вектора слева-направо параллельно
01:34:30 atomic_int и неблокирующая обработка вектора слева-направо
01:42:15 Список файлов в директории Downloads в C и цикл по всем файлам
01:47:12 condition_variable, unique_lock и одновременное создание работ и их выполнение - пишем третий способ распараллеливания
02:01:20 Объясняю третий способ распараллеливания - через уведомление спящих потоков, ожидающих работу, о том, что работа доступна!