Когда я запускаю следующую площадку я замечаю, что по умолчанию очередь отправки кажется последовательной очереди называется OS_dispatch_queue_serial.Swift 3: Почему OS_dispatch_queue_serial - очередь по умолчанию?
Почему?
В этом контексте я запутался семантическое использование асинхронного и синхронизации, так как в этом случае они, кажется, ведут себя как синхронно, так и последовательно.
Я не прав? Я запутываю серийность с синхронизацией?
Перед запуском кода я ожидал, чтобы достичь следующего:
Hello World
Hello Moon
world * (or Moon)
Moon * (or world)
// Note: here I assumed that async meant that the codes in the block would have been run in parallel to each other and that this would have meant that either world or Moon would have been printed depending on **race conditions**
Hello World
world
Hello Moon
Moon
площадка код:
import Foundation
import PlaygroundSupport
PlaygroundPage.current.needsIndefiniteExecution = true
let queue = DispatchQueue(label: "com.test.myqueue")
queue.async {
print("Hello World")
sleep(2)
print("world")
}
queue.async {
print("Hello Moon")
sleep(1)
print("Moon")
}
queue.sync {
print("Hello World")
sleep(2)
print("world")
}
queue.sync {
print("Hello Moon")
sleep(1)
print("Moon")
}
Любая помощь понимание этого быстрее было бы здорово.
Первоначально (IOS 4/OS X 10.6) можно не создавать параллельные очереди в ГКД. Были системные параллельные очереди, но вы больше не могли создавать. В iOS 4.3/OS X 10.7 они добавили возможность создавать параллельные очереди, но сохраняли серийные очереди по умолчанию. На практике я редко встречался с обычными параллельными очередями, обычно при реализации шаблона производителя/потребителя (https://github.com/iosptl/ios7ptl/blob/master/ch23-AdvGCD/ProducerConsumer/ProducerConsumer/ViewController.m) , Обычно достаточно системы. Обычно, когда вы создаете пользовательскую очередь, это сериализовать доступ. –
(даже в приведенном выше примере действительно не нужна индивидуальная параллельная очередь, это было бы хорошо с одной из системных очередей, поэтому это все реже, чем это ...: D Но многие из вещей, которые вы используете для очереди с очередью, это не будет сделано, если вы не сможете создать пользовательский вариант.) –