Параллельное программирование в 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