多线程之GCD简述

引言

在iOS的一系列API中,GCD可谓一等公民,由于其简洁性和易用性,在多线程的学习和使用中GCD也成为必不可少的一部分。
很多初学者可能搞不清楚queue和线程之间的关系,或者干脆把queue当作线程来看,其实这种理解是非常不正确的,在此我们就对GCD和线程做一个简单的整理。

队列与线程

首先我们对相关的几个名词做一下名词解释:

  • GCD
    全称Grand Central Dispatch,中文译作大中枢派发系统,用来处理多任务与多线程的派发与执行。
  • queue
    用于存储任务的队列,遵循先进先出原则,也就是先加入的任务先执行后加入的任务后执行,队列中的任务可分配到多个线程中。
  • 线程
    具体处理各任务的计算与执行,单个线程同一时间只能处理一个任务。

GCD的队列可以分为三种类型:

  1. 主队列
    队列中的任务只会在主线程执行

  2. 并发队列
    队列中的任务可以按先后顺序试线程空闲情况分配到多个线程中,队列中的任务可以并发执行并且完成的顺序不定。

  3. 串行队列
    队列中的任务按照FIFO(先进先出)的顺序分配到线程中,一个完成后再继续下一个,线程中的任务不会同时进行,从而完成顺序也是固定的。

主队列可通过dispatch_get_main_queue()获取,并发队列和串行队列可通过dispatch_queue_create函数创建。
dispatch_get_global_queue函数返回的队列为并发队列,并且可以通过指定dispatch_queue_priority_t获取不同优先级的队列,优先级DISPATCH_QUEUE_PRIORITY_HIGH>DISPATCH_QUEUE_PRIORITY_DEFAULT>DISPATCH_QUEUE_PRIORITY_LOW>DISPATCH_QUEUE_PRIORITY_BACKGROUND,高优先级队列的中的任务会先执行,该队列所有任务完成之后再继续进行下一优先级队列中的任务。

向队列中添加任务的方式分为同步和异步两种:

  • 异步
    不会阻塞当前线程,添加后会继续执行后面的代码。

  • 同步
    阻塞当前线程,添加后会一直等待任务完成,完成后继续执行后面的代码。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值