关于多线程、Thread、GCD(Grand Central Dispatch)学习笔记

一、多线程

IOS中常见的多线程:

(1)pthread©:
一套通用的API,适用于Unix\Linux\Windows等系统,可跨平台可移植,使用的难度比较大。几乎不使用,但严格来说我们要是做 “加锁”,“解锁”操作的时候还是会用到pthread。
(2)NSThread(OC):
使用更加面向对象,可以直接操作线程对象,偶尔使用。
(3)GCD(Grand Central Dispatch)(C):
替代NSThread等线程技术,充分的利用了设备的多核。使用最多,更倾向使用。
(4)NSOperation(OC):
基于GCD(底层是GCD),比GCD多了一些更加实用的功能,使用起来更加面对对象,经常使用。

注意:其实NSThread、GCD、NSOperation底层都是依赖于pthread
常见面试题
ios常见的多线程方案有哪些?

二、GCD

GCD中有2个用来执行任务的函数

1.用 同步 的方式来执行任务(sync)

dispatch_sync(dispatch_queue_t queue,dispatch_block_t block);

queue:队列
block:任务

2.用 异步 的方式来执行任务(async)

dispatch_async(dispatch_queue_t queue,dispatch_block_t block);

GCD的队列可以分为两大类型

并发 队列:
可以让多个任务并发(同时)执行(自动开启多个线程同时执行任务)。
并发功能只有在
异步
(dispatch_async)下才有效。

串行队列:
让任务一个个执行,一个执行完之后才会执行下一个。

注意:GCD中通过create创建的队列不需要去释放


很容易混淆的术语

同步 异步 并发 串行

同步和异步

同步异步的主要影响:能不能开启新的线程
同步:在当前线程中执行任务,不具备开启新线程的能力
异步:在新的线程中执行任务,具备开启新线程的能力

并发和串行

并发和串行主要影响:任务的执行方式
并发多个任务并发(同时)执行
串行一个任务执行完毕之后,再执行下一个任务

注意:用async 或者 sync并不影响你的任务是串行执行还是并发执行,只影响你的任务在哪一个线程 执行。他们只是用来控制 是否开启一个新的线程

队列的类型(并发队列、串行队列、主队列(也是一个串行队列))决定了任务的执行方式

也不能说用了async就一定是异步的,就一定开新线程。(一旦传入的队列是主队列)
并发队列串行队列主队列
同步(sync)没有开启新线程,串行执行任务没有开启新线程,串行执行任务没有开启新线程,串行执行任务
异步(async)开启新线程,并发执行任务开启新线程,串行执行任务没有开启新线程,串行执行任务

注意:使用sync函数往当前串行队列里添加任务会产生死锁。

  • 10
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值