我编写了一个示例代码,以深入了解以下线程概念。
print("a")
DispatchQueue.global(qos: .default).async {
print("b")
DispatchQueue.global(qos: .default).async {
print("c")
DispatchQueue.global(qos: .default).async {
print("d")
DispatchQueue.global(qos: .default).async {
print("e")
}
print("f")
}
print("g")
}
print("h")
}
print("i")
输出
a
i
b
h
c
g
d
f
e
输出看起来像这样。内部到底发生了什么?
答案 0 :(得分:2)
有两种基本行为:
顾名思义,总是在封闭范围– {}
–退出后执行。
因此i
在b
之前打印,h
在c
等之前打印。
默认情况下,调度队列是串行工作的,所有任务都依次执行
因此连续订单为i - b - h - c - g - d - f - e
答案 1 :(得分:1)
想法是其中任意2行1是
DispatchQueue.global(qos: .default).async
第二个将首先运行,因此
print("a")
DispatchQueue.global(qos: .default).async {
print("b")
}
print("i")
给予
a // comes first
i // printed first before queue as the queue dispatches the execution with some delay
b // printed second
然后进入异步并应用相同的规则
DispatchQueue.global(qos: .default).async {
print("c")
DispatchQueue.global(qos: .default).async {
print("d")
}
print("g")
}
print("h")
h
c
g
d
答案 2 :(得分:1)
在每个DispatchQueue上,全局上下文都被拆分了,而分发的成本却比简单打印要高。