Введение в асинхронность и многопоточность 0:00 Обсуждение сложности темы асинхронности и многопоточности в языке программирования. Упоминание о технологиях, позволяющих работать со временем. План урока: обсуждение фич, генераторов и изолятов.
Основные термины 0:59 Объяснение терминов «процесс», «поток» и их различий. Разъяснение, что асинхронный код и многопоточность не являются синонимами.
Процессы и операционная система 1:56 Описание работы процессора и операционной системы. Многоядерные процессоры могут выполнять несколько команд одновременно. Операционная система постоянно выполняет множество задач.
Изоляция процессов 3:53 Каждый процесс изолирован от других процессов. Процессы используют свои области памяти. Операционка позволяет нескольким процессам выполняться одновременно.
Потоки внутри процессов 5:51 Потоки — это последовательность выполнения кода внутри процесса. Потоки могут выполняться параллельно, используя многоядерные процессоры. Пример: два потока могут выполнять расчёт одновременно.
Взаимодействие процессов 6:51 Процессы могут обмениваться информацией через команды. Пример взаимодействия: приложение-загрузчик фотографий и приложение-обработчик фотографий. Работа с сетью осуществляется через операционную систему.
Главный поток 9:48 В каждой программе есть главный поток, который выполняет основные команды. Без главного потока приложение не работает. После завершения выполнения кода поток умирает вместе с процессом.
Заключение 10:47 Подчёркивание важности понимания различий между процессами и потоками. Потоки позволяют выполнять код параллельно, используя многоядерные процессоры. Главный поток — обязательный элемент любой программы.
Многопоточность и асинхронность 11:44 Многопоточность позволяет выполнять код в нескольких потоках одновременно. Асинхронность позволяет не ждать завершения задач, например, загрузки файла, и продолжать выполнение кода. Пример: загрузка файла весом 3 ГБ занимает 10 минут, но с асинхронностью приложение может продолжать работу, пока загрузка идёт.
Принцип работы асинхронности 12:42 Асинхронность работает в рамках одного потока и позволяет не блокировать выполнение кода. Программа может запросить загрузку файла у операционной системы, но не ждать её завершения. После завершения загрузки операционная система возвращает файл приложению, которое может продолжить обработку.
Применение асинхронности 15:30 Асинхронность полезна для длительных операций, таких как загрузка данных из сети или получение геопозиции. Длительные операции часто не имеют смысла ждать, поэтому асинхронность позволяет продолжить выполнение кода. Краткое определение асинхронности: возможность начать выполнение функции, бросить её и продолжить позже.
Класс Future 17:24 Класс Future используется для работы с асинхронными операциями. Future содержит действие, которое выполняется в будущем, и принимает значение после завершения. Методы класса Future позволяют откладывать выполнение действий на заданное время.
Методы ожидания 18:24 Метод wait() позволяет ждать указанное время, блокируя поток. Метод sleep() создаёт паузу на заданное количество секунд. Блокирующие ожидания могут привести к завершению приложения, если оно не отвечает в течение длительного времени.
Использование Futures 21:19 Futures позволяют откладывать выполнение действий без блокировки потока. Futures создают объекты, которые выполняют действие внутри себя и возвращают значение после завершения. Метод await() позволяет ожидать завершения Futures и работать с полученным значением.
Работа с замыканиями 23:17 Замыкания позволяют передавать функции между методами. В Futures можно создавать анонимные функции и передавать их в методы. Переданные функции выполняются после завершения действия Futures.
Введение в фьючерсы 24:16 Обсуждение создания фьючерса, который будет ждать 10 секунд. Объяснение работы call back: функция, которая выполняется после завершения действия. Пример использования фьючерса с print 4.
Проблемы с параметрами 26:12 Обсуждение проблем с аргументами в коде. Устранение ошибок, связанных с аргументами error и invalid. Проверка корректности кода после исправления ошибок.
Асинхронность фьючерсов 28:05 Объяснение асинхронного выполнения кода с фьючерсами. Сравнение с использованием slip, который ставит поток на паузу. Подчёркивание важности асинхронности в программировании.
Эксперимент с for 30:02 Создание цикла for для загрузки потока работой. Демонстрация того, что поток не может выполнять несколько действий одновременно. Объяснение, почему print 4 не выполняется сразу после for.
Аналогия с приготовлением чая 31:59 Аналогия потока с человеком, готовящим чай. Описание ситуаций, когда действия выполняются последовательно или асинхронно. Подчёркивание преимуществ асинхронного выполнения действий.
Чтение файла с использованием фьючерса 35:51 Пример чтения файла с компьютера. Использование фьючерса для отложенного выполнения операции чтения файла. Подтверждение корректного чтения файла после использования фьючерса.
Проверка производительности 37:50 Демонстрация вывода данных в консоль без блокировки основного процесса. Объяснение, что компьютер может выполнять множество операций параллельно.
Загрузка данных из интернета 38:49 Попытка загрузить страницу через HTTP-клиент. Проблемы с созданием URL из строки.
Работа с URL 40:46 Использование URLParser для создания URL из строки. Успешное преобразование строки в URL.
Синхронные действия 42:41 Объяснение синхронного выполнения действий без блокировки приложения. Важность асинхронного выполнения для эффективной работы.
Методы фьючерсов 43:40 Описание методов фьючерсов: error, timeout, complete. Примеры использования методов для обработки ошибок и тайм-аутов.
Работа с несколькими фьючерсами 45:36 Создание нескольких фьючерсов с разными задержками. Использование await для ожидания завершения всех фьючерсов.
Пример использования await 47:34 Демонстрация работы await с несколькими фьючерсами. Вывод результатов в консоль после завершения всех фьючерсов.
Заключение 49:33 Подведение итогов по использованию фьючерсов. Анонс следующего урока о работе с синкавами.