博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
## iOS-GCD多线程理解
阅读量:5908 次
发布时间:2019-06-19

本文共 867 字,大约阅读时间需要 2 分钟。

买了<<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)")}复制代码

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

转载地址:http://qlvpx.baihongyu.com/

你可能感兴趣的文章
顶部BANNER
查看>>
使用IDEA部署项目到远程服务器
查看>>
Python3求英文文档中每个单词出现的次数并排序
查看>>
【VS】使用vs2017自带的诊断工具(Diagnostic Tools)诊断程序的内存问题
查看>>
转: 关于linux用户时间与系统时间的说明
查看>>
CentOS7切换到root用户和退回普通用户
查看>>
常用的几个vagrant命令
查看>>
HDU1398 Square Coins(生成函数)
查看>>
Excel导出文件流下载
查看>>
linux设置预留端口号,防止监听端口被占用 ip_local_reserved_ports
查看>>
Vue.js 2.x:组件的定义和注册(详细的图文教程)
查看>>
定位多线程内存越界问题实践总结【转】
查看>>
堆排序
查看>>
Redis 如何分布式,来看京东金融的设计与实践
查看>>
Ubuntu 12.04将默认集成Landscape管理套件【转】
查看>>
Windows 7安装超级终端连接COM口设备
查看>>
迭代器模式
查看>>
oracle获取过去两年的今天时间
查看>>
微信小程序登录JAVA后台
查看>>
如何恢复回收站删除的文件
查看>>