DispatchQueue.main.async {
print(2)
DispatchQueue.main.async {
print(3)
}
}
print(1)
}`
Почему на экран выводится 1, 2, 3. Именно в этом порядке. Ведь потоки ассинхроны, и по идее, должны выполнится в случайном порядке, в зависимости от того, какому потоку был выдан ключ. Но почему выводятся имено в порядке 1,2,3?
Ты их в таком порядке ставишь в очередь. Вот и результат.
то есть, если я ставлю их в очередь main, то они не будут ассинхронны друг другу?
Будут. Просто в момент выполнения 1 блока выполняется печать и постановка в очередь второго блока с принтом. Поэтому 3 не может быть раньше 2. Асинхронно != параллельно. + main это serial queue
Мда уж этот GCD мне ещё изучать и изучать… Просто на Джава гораздо проще было: были просто потоки Thread. Создаёшь объект потока и выполняешь либо синхронно либо асинхронно и всё. А концепция с очередями мне вообще не понятна. Для чего вообще эти очереди нужны и что они из себя представляют или почему нельзя просто разделять выполнение потоками без очередей. Объяснения внятного в статьях не нашёл, к сожалению 🙁
А с корутинами у вас проблем не было?) Ну или бог с ним с корутинами с Looper? Идея то одинаковая по сути
Абстракция над потоками. Никто не запрещает создавать свои NSThread. А вот если хочешь острых ощущений и полного контроля можешь p_thread сишный поднять)
Обсуждают сегодня