Swift GCD 的串行队列与并行队列
xxxixxxx
队列 异步是否阻塞当前线程 同步是否阻塞当前线程 执行顺序
串行队列 按添加顺序
并行队列 同时执行,但会被同步阻塞

串行队列异步任务不会阻塞线程,同步会阻塞当前线程,执行顺序按添加顺序

并行队列异步任务不会阻塞线程,同步会阻塞当前线程,同时执行,但会被同步阻塞


串行队列

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
let queue = DispatchQueue(label: "queue")
print("------ 开始 -------")
queue.async {
Thread.sleep(forTimeInterval: 3)
print("------ async 1 -------")
}

print("------ async 1 不阻塞 -------")

queue.async {
print("------ async 2 -------")
}

queue.sync {
Thread.sleep(forTimeInterval: 3)
print("------ sync 1 -------")
}

print("------ 被 sync 1 阻塞 -------")

queue.async {
print("------ async 3 -------")
}

------ 开始 -------
------ async 1 不阻塞 -------
------ async 1 -------
------ async 2 -------
------ sync 1 -------
------ 被 sync 1 阻塞 -------
------ async 3 -------

并行队列

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
let queue = DispatchQueue(label: "queue", attributes: DispatchQueue.Attributes.concurrent)
print("------ 开始 -------")
queue.async {
Thread.sleep(forTimeInterval: 3)
print("------ async 1 -------")
}

print("------ async 1 不阻塞 -------")

queue.async {
print("------ async 2 -------")
}

queue.sync {
Thread.sleep(forTimeInterval: 5)
print("------ sync 1 -------")
}

print("------ 被 sync 1 阻塞 -------")

queue.async {
print("------ async 3 -------")
}

------ 开始 -------
------ async 1 不阻塞 -------
------ async 2 -------
------ async 1 -------
------ sync 1 -------
------ 被 sync 1 阻塞 -------
------ async 3 -------
  • Post title:Swift GCD 的串行队列与并行队列
  • Post author:xxxixxxx
  • Create time:2020-11-07 00:00:00
  • Post link:https://xxxixxx.github.io/2020/11/07/100-Swift-GCD-的串行队列与并行队列/
  • Copyright Notice:All articles in this blog are licensed under BY-NC-SA unless stating additionally.
 Comments