В чем разница между параллельной очередью отправки и последовательной очередью отправки
я реализую следующий класс:
class GCDStudy {
func asyncSerial(time:Double){
let queue = dispatch_queue_create("DISPATCH_QUEUE_SERIAL",DISPATCH_QUEUE_SERIAL)
dispatch_async(queue){
var i:Double = 0
while(i < 3){
i++
print("asyncSerial -wait:(time)-(i)")
}
}
}
func asyncConcurrent(time:Double){
let queue = dispatch_queue_create("DISPATCH_QUEUE_CONCURRENT",DISPATCH_QUEUE_CONCURRENT)
dispatch_async(queue){
var i:Double = 0
while(i < 3){
i++
print("asyncConcurrent -wait:(time)-(i)")
}
}
}
}
и выполните следующие действия:
Запуск:
gCDStudy = GCDStudy()
gCDStudy.asyncSerial(1)
gCDStudy.asyncSerial(2)
Запустить B
vgCDStudy2 = GCDStudy()
gCDStudy2.asyncConcurrent(1)
gCDStudy2.asyncConcurrent(2)
и результат RunA:
asyncSerial -wait:1.0-1.0
asyncSerial -wait:2.0-1.0
asyncSerial -wait:1.0-2.0
asyncSerial -wait:2.0-2.0
asyncSerial -wait:1.0-3.0
asyncSerial -wait:2.0-3.0
результат RunB:
asyncSerial -wait:1.0-1.0
asyncSerial -wait:2.0-1.0
asyncSerial -wait:1.0-2.0
asyncSerial -wait:2.0-2.0
asyncSerial -wait:1.0-3.0
asyncSerial -wait:2.0-3.0
эти результаты одинаковы, в чем разница между этими?
иногда эти результаты отличаются.
спасибо
1 ответов
последовательные очереди выполняют одну задачу за раз в том порядке, в котором они добавляются в очередь, тогда как параллельные очереди выполняют одну или несколько задач одновременно. Важно отметить, что даже для одновременных очередей задачи запускаются в том порядке, в котором они были добавлены в очередь. Из-за этого в вашем случае вы, вероятно, не увидите никаких изменений в выходных данных как print
будет выполняться довольно быстро каждым потоком в параллельной очереди, так что будет казаться, что они были выполнены последовательно.
Если вы ожидаете увидеть разницу, возможно, вы можете попробовать обновить свой код следующим образом:
class GCDStudy {
func asyncSerial(time: Double) {
let queue = dispatch_queue_create("DISPATCH_QUEUE_SERIAL", DISPATCH_QUEUE_SERIAL)
for i in 0..<3 {
dispatch_async(queue) {
print("asyncSerial -wait:\(time)-\(i)")
}
}
}
func asyncConcurrent(time: Double) {
let queue = dispatch_queue_create("DISPATCH_QUEUE_CONCURRENT", DISPATCH_QUEUE_CONCURRENT)
for i in 0..<3 {
dispatch_async(queue) {
print("asyncConcurrent -wait:\(time)-\(i)")
}
}
}
}