Многопоточность и параллелизм Flashcards

1
Q

Что такое GCD?

A

GCD — это библиотека, которая предоставляет низкоуровневый объектно-ориентированный API для одновременного выполнения задач при управлении потоками за кулисами. GCD абстрагирует код управления потоками и перемещает его на системный уровень, предоставляя легкий API для определения задач и их выполнения в соответствующей очереди отправки.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
2
Q

Что такое очередь отправки?

A

Очередь отправки отвечает за выполнение задачи в порядке FIFO.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
3
Q

Объясните основной поток и его использование

A

Основной поток в iOS относится к основному потоку выполнения приложения. Он отвечает за обработку событий и обновлений пользовательского интерфейса, а также за выполнение важных задач, таких как обновление анимации и обработка пользовательского ввода.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
4
Q

Что такое serial queue?

A

Последовательная очередь может запускать задачи по одной, и ей нужно дождаться завершения запущенных задач.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
5
Q

Что такое concurrent queue?

A

Параллельная очередь может запускать столько задач, сколько может, не дожидаясь завершения запущенных задач.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
6
Q

Экземпляры очередей GCD

A

Основная очередь
Глобальная очередь
Пользовательская очередь

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
7
Q

Очереди GCD

A

Очереди GCD являются основным механизмом выполнения задач в GCD. Их можно рассматривать как набор задач, которые необходимо выполнить, и они используются для управления порядком выполнения задач и количеством задач, которые могут выполняться одновременно. Задачи могут быть добавлены в очередь, а затем очередь выполняет эти задачи в том порядке, в котором они были добавлены. В GCD есть два типа очередей: последовательные и параллельные. Последовательная очередь запускает задачи по одной в том порядке, в котором они были добавлены, в то время как параллельная очередь может запускать несколько задач одновременно.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
8
Q

Quality of Service GCD

A

User Interactive: работа, которая происходит в основном потоке.
User Initiated: работа, которую запускает пользователь и которая должна дать немедленные результаты.
Utility: работа, которая может занять немного времени и не требует немедленного завершения.
Background: Эта работа не видна пользователю.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
9
Q

Проблемы многопоточности

A

Race condition (Состояние гонки)
Priority inversion (Инверсия приоритетов) Deadlock (Взаимная блокировка)
Livelock (Активная блокировка)
Starvation (Голодание)
Data Race (Гонка за данными)

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
10
Q

Race condition (Состояние гонки)

A

Ситуация, возникающая, когда время или порядок событий влияют на корректность результата.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
11
Q

Priority inversion (Инверсия приоритетов)

A

Поток с низким приоритетом удерживает ресурс, который требуется другому потоку — с более высоким приоритетом.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
12
Q

Deadlock (Взаимная блокировка)

A

Это ситуация, когда несколько потоков блокируют друг друга.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
13
Q

Livelock (Активная блокировка)

A

Программа выполняет параллельно несколько операций, но эти операции не продвигают программу к завершению.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
14
Q

Starvation (Голодание)

A

Параллельный процесс не может получить ресурсы, необходимые для выполнения его работы.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
15
Q

Data Race (Гонка за данными)

A

Состояние, когда один поток обращается к изменяемому объекту, в то время как другой поток записывает в него.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
16
Q

Что такое async-await в Swift?

A

Это шаблон программирования, который позволяет вам писать асинхронный код в более читабельном и лаконичном виде в Swift

17
Q

Что такое параллелизм и разделение времени?

A

Параллелизм — это структурный способ запуска нескольких задач одновременно. Квантование времени используется для обеспечения параллелизма на одном основном устройстве

18
Q

Что такое NSOperation?

A

NSOperation построен на основе GCD. При использовании NSOperation разработчик может добавлять зависимости между различными операциями и повторно использовать, отменять и приостанавливать операции.

19
Q

Что такое ThreadPool?

A

ThreadPool — это пул потоков, который повторно использует фиксированное количество потоков для выполнения конкретной задачи.

20
Q

Объясните concurrency против parallelism

A

Concurrency — это когда две или более задач могут запускаться, выполняться и завершаться в перекрывающиеся периоды времени. Это не обязательно означает, что они когда-либо будут работать одновременно.

Parallelism — это когда задачи выполняются буквально одновременно

21
Q

Что такое семафор?

A

Семафоры дают нам возможность контролировать доступ к общему ресурсу несколькими потоками. Семафор состоит из очереди потоков и значения счетчика. Значение счетчика используется семафором, чтобы решить, должен ли поток получить доступ к общему ресурсу или нет. Значение счетчика изменяется, когда мы вызываем функции signal() или wait().