Многопоточность и параллелизм Flashcards
Что такое GCD?
GCD — это библиотека, которая предоставляет низкоуровневый объектно-ориентированный API для одновременного выполнения задач при управлении потоками за кулисами. GCD абстрагирует код управления потоками и перемещает его на системный уровень, предоставляя легкий API для определения задач и их выполнения в соответствующей очереди отправки.
Что такое очередь отправки?
Очередь отправки отвечает за выполнение задачи в порядке FIFO.
Объясните основной поток и его использование
Основной поток в iOS относится к основному потоку выполнения приложения. Он отвечает за обработку событий и обновлений пользовательского интерфейса, а также за выполнение важных задач, таких как обновление анимации и обработка пользовательского ввода.
Что такое serial queue?
Последовательная очередь может запускать задачи по одной, и ей нужно дождаться завершения запущенных задач.
Что такое concurrent queue?
Параллельная очередь может запускать столько задач, сколько может, не дожидаясь завершения запущенных задач.
Экземпляры очередей GCD
Основная очередь
Глобальная очередь
Пользовательская очередь
Очереди GCD
Очереди GCD являются основным механизмом выполнения задач в GCD. Их можно рассматривать как набор задач, которые необходимо выполнить, и они используются для управления порядком выполнения задач и количеством задач, которые могут выполняться одновременно. Задачи могут быть добавлены в очередь, а затем очередь выполняет эти задачи в том порядке, в котором они были добавлены. В GCD есть два типа очередей: последовательные и параллельные. Последовательная очередь запускает задачи по одной в том порядке, в котором они были добавлены, в то время как параллельная очередь может запускать несколько задач одновременно.
Quality of Service GCD
User Interactive: работа, которая происходит в основном потоке.
User Initiated: работа, которую запускает пользователь и которая должна дать немедленные результаты.
Utility: работа, которая может занять немного времени и не требует немедленного завершения.
Background: Эта работа не видна пользователю.
Проблемы многопоточности
Race condition (Состояние гонки)
Priority inversion (Инверсия приоритетов) Deadlock (Взаимная блокировка)
Livelock (Активная блокировка)
Starvation (Голодание)
Data Race (Гонка за данными)
Race condition (Состояние гонки)
Ситуация, возникающая, когда время или порядок событий влияют на корректность результата.
Priority inversion (Инверсия приоритетов)
Поток с низким приоритетом удерживает ресурс, который требуется другому потоку — с более высоким приоритетом.
Deadlock (Взаимная блокировка)
Это ситуация, когда несколько потоков блокируют друг друга.
Livelock (Активная блокировка)
Программа выполняет параллельно несколько операций, но эти операции не продвигают программу к завершению.
Starvation (Голодание)
Параллельный процесс не может получить ресурсы, необходимые для выполнения его работы.
Data Race (Гонка за данными)
Состояние, когда один поток обращается к изменяемому объекту, в то время как другой поток записывает в него.
Что такое async-await в Swift?
Это шаблон программирования, который позволяет вам писать асинхронный код в более читабельном и лаконичном виде в Swift
Что такое параллелизм и разделение времени?
Параллелизм — это структурный способ запуска нескольких задач одновременно. Квантование времени используется для обеспечения параллелизма на одном основном устройстве
Что такое NSOperation?
NSOperation построен на основе GCD. При использовании NSOperation разработчик может добавлять зависимости между различными операциями и повторно использовать, отменять и приостанавливать операции.
Что такое ThreadPool?
ThreadPool — это пул потоков, который повторно использует фиксированное количество потоков для выполнения конкретной задачи.
Объясните concurrency против parallelism
Concurrency — это когда две или более задач могут запускаться, выполняться и завершаться в перекрывающиеся периоды времени. Это не обязательно означает, что они когда-либо будут работать одновременно.
Parallelism — это когда задачи выполняются буквально одновременно
Что такое семафор?
Семафоры дают нам возможность контролировать доступ к общему ресурсу несколькими потоками. Семафор состоит из очереди потоков и значения счетчика. Значение счетчика используется семафором, чтобы решить, должен ли поток получить доступ к общему ресурсу или нет. Значение счетчика изменяется, когда мы вызываем функции signal() или wait().