Pull to refresh

Comments 4

Очень познавательно. Используя с недавних пор Task, я не удосужился проверить как он работает с приоритетами =)

Автор почему-то рассуждает об этом как о чём-то невероятном, хотя казалось бы реализация подобной логики примитивна.
Просто один глобальный объект который имеет право создавать реальные потоки, если потоков уже максимум, то вместо реального потока создаётся объект с таким же интерфейсом, но в .execute(task) ставящий задачу в очередь настоящего потока

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

В навигаторе отладки отображаются реальные потоки, которые управляются как раз через GCD. Что приводится в статье под термином потоков - это задачи GCD. Каждая из них будет выполняться ровно на том потоке, приоритетом которого обладает.

Я выполнил этот тест пару раз, максимальное количество потоков может немного отличаться, но оно более или менее равно 3-кратному количеству ядер ЦП.

Опять же - нет. Вне зависимости от количества ядер, система выделяет четко определенное количество потоков - один основной (main), 1-3 фоновых (в зависимости от загруженности и количества задач, находящихся в очереди libdispatch) и остальные (eventloop для UI приложений, таймеров и тд, network - для работы с сетью, XPC - для взаимодействия с другими сервисами системы (тот же NSNotificationCenter))

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

После выполнения приведенный выше код создаст в общей сложности 150 потоков

вы хоть код то запускали ?) какие блин потоки) работа закидывается на очередь, а как там раскидается по потокам известно только системе, я запустил, создалось примерно 50 потоков, которые были переиспользованны несколько раз, выведите в консоли Thread.current. Чтобы из кода создать поток надо вызвать Thread.new(...).

Sign up to leave a comment.

Articles