Вы спрашиваете:
содержит ли нить только 2 типа: Основную нить и Фоновую нить?
Я не уверен, что опишу ихкак разные «типы», но с точки зрения разработчика приложения, да, есть «основной» поток, предназначенный для пользовательского интерфейса, основного цикла выполнения и т. д., и есть все другие потоки, которые, напротив, иопределение, «фоновые» потоки.
Мы всегда хотим быть осторожными в отношении того, что мы запускаем основную очередь (т.е. не запускаем в ней ничего, что могло бы блокировать этот поток и эффективно блокировать пользовательский интерфейс).На практике мы хотим избежать выполнения в основной очереди каких-либо действий, которые могли бы заблокировать ее не более, чем на несколько миллисекунд.
означает, что Фоновый поток означает, что все выполняемые задачи не будут блокироватьUI?
Эффективно, да.Но мы имеем дело с ограниченными ресурсами на наших устройствах, и поэтому разработчики должны быть разумными.Например, для наших фоновых задач мы хотим использовать QoS, соразмерный тому, что делает эта очередь.Или, если распараллелить какую-то задачу, нужно быть осторожным с ограничением степени параллелизма.Но если рассудить об использовании системных ресурсов и продолжать блокировать задачи из основной очереди, то это может обеспечить отзывчивый пользовательский интерфейс.
Итог, да, если у вас есть какой-то код, который блокирует потокна котором он выполняется (например, он требует больших вычислительных затрат, имеет блокирующие вызовы, такие как семафоры или группы рассылки wait
и т. д.), вы обычно запускаете его в фоновом потоке, чтобы избежать блокировки основной очереди.
Поскольку в нем упоминается, что пользовательский интерактив является приоритетом выполнения задачи в главном потоке, чтобы избежать задержек пользовательского интерфейса, это означает, что все другие типы: инициируемые пользователем, служебные программы, фон будут иметь фоновый поток, который не имеетblock UI?
Это просто уровни качества обслуживания, которые являются относительными приоритетами для очередей.Это не вопрос «заблокировать пользовательский интерфейс» или «нет», а скорее вопрос о том, как GCD устанавливает приоритеты и распределяет ресурсы.
По ссылке «Как создать очередь отправки в Swift 3».В нем упоминается несколько различных способов создания очереди отправки, некоторые из которых являются параллельными, некоторые являются последовательными ...
Да
... В нем также упоминается, чтоприсваивая QOS по умолчанию или фону, это гарантирует, что очередь обращается к фоновым потокам ...
Это не совсем имеет смысла.Возможно, вы можете поделиться конкретной выдержкой из документов, и мы поможем вам интерпретировать то, что они пытались сказать.
... Но ничего подобного не упоминалось в последовательном и параллельном.Интересно, они правильные?
QoS - это просто вопрос приоритета и ресурсов для данной очереди.Serial vs concurrent - это просто вопрос того, ограничена ли очередь одним потоком за раз или она может использовать несколько потоков, когда это необходимо и доступно.