В этом видео мы разбираем 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 Объясняю третий способ распараллеливания - через уведомление спящих потоков, ожидающих работу, о том, что работа доступна!
Hide player controls
Hide resume playing