## iOS-GCD多线程理解

买了<<Objective-C高级编程 iOS与OS X多线程和内存管理>>,发现自己以前理解的GCD多线程是错误的

以前理解的dispatch_async就会开一个新的线程去执行任务,其实是不对的.

按照书中理解的,dispatch_get_main_queue是一个主队列,这个队列是一个串行队列,是在主线程上执行的队列,也就是number=1的线程上.

全局队列*dispatch_get_global_queue(0, 0)*是一个全局的并行队列.

串行队列和并行队列的区别是: 串行队列中的任务是按先进先出的顺序执行的. 并行队列中的任务是允许同时多个线程去执行的.

dispatch_sync是同步追加任务到队列.追加任务会等待队列前面的任务执行完后再执行追加的任务. dispatch_async是异步追加任务到队列.追加任务不会等待队列中的其他任务执行完成.(队列任务可以异步执行,你先走,不用管我)

串行队列同步追加

追加到当前的线程中,会等待当前线程中前面的任务执行完毕后在执行追加的任务

queue.sync {

    print("queue - \(Thread.current)")
}
复制代码
串行队列异步追加

追加到串行队列的线程中,会等待串行队列中的任务执行完毕后执行追加的任务,当前线程不受影响

queue.async {

    print("queue - \(Thread.current)")
}
复制代码
并行队列同步追加

追加到当前的线程中,会等待当前线程.

conQueue.sync {
            
    print("2 - \(Thread.current)")
}
复制代码
并行队列异步追加

追加到并行队列的线程中,因为是并行队列,可以开启多个线程执行多个任务,不会等待.我们常用的就是这种

conQueue.async {
            
    print("2 - \(Thread.current)")
}
复制代码

刚刚开始写文章,有写的不对的地方还请大佬们指正

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值