_5_GCD相关-变更队列的线程执行优先级

dispatch_queue_create 此函数生成的"Dispatch Queue"不管是"Serial Dispatch Queue"还是"Concurrent Dispatch Queue", 都使用的是与默认优先级(Default Priority)Global Dispatch Queue相同执行优先级的线程.

而想要变更我们创建的 Dispatch Queue 的执行优先级, 需要使用 dispatch_set_target_queue 函数. 如下源代码表示变更线程执行优先级为后台的"Serial Dispatch Queue".

_5_GCD相关-变更队列的线程执行优先级_第1张图片

dispatch_set_target_queue


此函数的第一个参数为指定要变更线程执行优先级的"Dispatch Queue".

第二个参数一般为Global Dispatch Queue. 该Dispatch Queue 的线程执行优先级需要具有我们想要使用的优先级.

dispatch_set_target_queue 的另一个作用


dispatch_set_target_queue不仅可以变更 Dispatch Queue 的执行优先级, 同时还可以作成 Dispatch Queue 的执行阶层.

执行阶层是什么? 在解释之前我们先聊聊多个"Serial Dispatch Queue"在执行任务时是怎样执行的. 代码如下:

_5_GCD相关-变更队列的线程执行优先级_第2张图片
源代码
执行结果

如上结果, 多个"Serial Dispatch Queue"在执行任务时是并行执行的, 也就是说队列和队列之间不会影响各自的任务执行. 但是如果我们并不需要并行处理或者要求一个一个执行, 该怎么办?

我们再来看看通过 dispatch_set_target_queue 设置后的代码: (01-02-03)

_5_GCD相关-变更队列的线程执行优先级_第3张图片
01


_5_GCD相关-变更队列的线程执行优先级_第4张图片
02
_5_GCD相关-变更队列的线程执行优先级_第5张图片
03执行结果

可以看到,

原本应该并行执行的多个 "Serial Dispatch Queue", 在设置她们上层队列为 "Serial Dispatch Queue" 后, 只能按队列的添加顺序依次执行任务.

所以如果我们将 dispatch_set_target_queue 函数的第二个参数指定为某一个 "Serial Dispatch Queue", 即可防止任务并行处理.

好了, 队列到这里就OK了, 我们下片文章再来看看延迟添加执行任务的API.

End.

你可能感兴趣的:(_5_GCD相关-变更队列的线程执行优先级)