Перейти к содержимому

Параллельное программирование в Rust: визуализация (полный курс)

Rust It Over

0:00 / 0:00

Параллельное программирование в Rust: визуализация (полный курс)

171 просмотр · 2 дня назад
Rust It Over
376 подписчиков
171 просмотр · 2 дня назад
Многопоточность и параллелизм в Rust, анимированные с нуля: потоки, мьютекс, дуга, Send и Sync, каналы, атомарные операции и кэш-линии. 16 глав, построенных вокруг одного вопроса: кому разрешено изменять это значение прямо сейчас, и что делает это безопасным? Каждый фрагмент кода в этом видео был скомпилирован и запущен на rustc 1.98.0 (версия 2021 года) во время его написания. Каждая ошибка компилятора и каждое показание времени на экране — это реальный вывод, а не имитация. Замеры времени — это отдельные примеры, выполненные на одном ноутбуке (Apple M2, macOS): форма данных сохраняется на вашей машине, точные миллисекунды — нет. Что вы усвоите: · Что такое гонка данных на самом деле: три условия, все обязательны. Безопасный Rust устраняет гонки данных, и проверка заимствований — лишь один из трех механизмов, стоящих за этим. · Ограничение на thread::spawn запрашивает две вещи: Send и 'static'. Большинство объяснений показывают только один из них. • Отправка и синхронизация: автоматические трейты, которые вы никогда не реализуете вручную, и почему ни один из них не подразумевает другой. • Arc предоставляет вам совместное владение и ничего больше. Второй владелец — это не второй записывающий. • Мьютекс в Rust владеет своими данными, и его защита ЯВЛЯЕТСЯ разблокировкой. Функции разблокировки нет. • Почему блокировка может оставаться в силе дольше, чем написанная вами строка (временные переменные match / while let / if let), и что изменилось, а что нет в версии 2024. • Блокировка каждого доступа не является блокировкой операции: программа без состояний гонки данных и без предупреждений, которая все равно теряет работу. • Восемь потоков удерживают одну защиту на протяжении всей своей работы: измерено, и не быстрее, чем один поток без блокировки вообще. • Отравление данных, более строгие ограничения RwLock, каналы, передающие права собственности, неограниченный канал без обратного давления, SeqCst выдает неверный ответ и ложное разделение. • Чего ничто из этого не предотвращает: взаимоблокировки, состояния гонки, не являющиеся гонками данных, утечки, справедливость. Разделы: 0:00 Мы назвали это гонкой данных. Это не так. 1:25 Компилятор запросил две вещи. Мы прочитали только одну. 2:54 Два свойства, которые никогда не нужно записывать 4:31 Второй владелец — это не второй записывающий 5:55 Мьютекс Rust — это не флаг. Он владеет данными. 7:22 Блокировка удерживается дольше, чем написанная вами строка 8:56 Блокировка каждого доступа не блокирует операцию 10:27 Восемь потоков, одна очередь 11:59 Почему блокировка дает вам результат 13:31 Блокировка типа «читатель-запись» требует большего, чем мьютекс 15:03 Переместите значение. Не делитесь им. 16:30 Канал без тормозов 18:01 Самый строгий порядок дал неверный ответ 19:32 Ничего не разделяется. Оно по-прежнему конкурирует. 21:05 Что ничто из этого не предотвращает 22:37 Кто может к этому прикасаться и когда Новичок в вопросах владения? Начните здесь: ▶ Владение и заимствование в Rust, наконец-то визуализировано:    • Rust Ownership & Borrowing, Finally Visual...   — Rust, визуализировано. Без лишних слов, без лишнего. — ▶ Подписаться: https://www.youtube.com/@RustItOver?s... 🦀 TikTok:   / rust.it.over   #rust #rustlang #concurrency #multithreading #programming