多线程之GCD学习demo

之前看到简书有同行总结出GCD的初级用法文章,我就整理出来这篇文章的demo,希望对大家有帮助

GCD

#######什么是GCD

全称是Grand Center Dispatch(CPU调度中心,调度的是任务和线程,把任务交给线程执行)。
纯C语言,提供了非常多、强大的函数。
GCD是libdispatch的统称,而libdispatch是苹果为了在多核硬件(如iOS、OSX)上提供处理并发代码的库。
#######GCD的优势

GCD是苹果公司为多核的并行运算提出的解决方案。
GCD会自动利用更多的CPU内核。
GCD会自动管理线程的生命周期(创建线程、调度任务、销毁线程)。
只要告诉GCD想要执行什么任务,不需要编写任何线程管理的代码。
GCD能帮助你分配繁重计算任务并且保持在后台运行,帮你提高App的响应程度。
GCD帮你提供易用的并发模式,不仅仅是锁和线程,帮助你避免在开发并发程序时的bug。
GCD具有在常见模式(如单例模式)以最原始的语句优化,是你的代码具有更高的效率。
GCD术语

串行、并行:所谓串行并行描述是相对而言的,串行是指在同一时间只执行一个任务,并行是指在同一时间可能执行多个任务。
同步、异步:在GCD中,同步异步是为了描述一个函数相对于该函数要求GCD执行完成的另一个任务。同步方法只在它完成它需要做的任务后才会返回。异步方法刚好和同步方法相反,它不会等待任务完成才返回,它会立即返回。所以异步不会阻塞当前线程执行另一个任务(方法\函数)。
死锁:两个(有时更多)东西——在大多数情况下,是线程——所谓的死锁是指它们都卡住了,并等待对方完成或执行其它操作。第一个不能完成是因为它在等待第二个的完成。但第二个也不能完成,因为它在等待第一个的完成。
线程安全:线程安全的代码在多线程或并发任务中被安全的调用,而不会导致任何问题(数据损坏、崩溃等)。线程不安全的代码在某个时刻只能在一个上下文中运行。一个线程安全代码的例子是NSDictionary,你可以在同一时间在多个线程中使用它而不会有问题,另一方面,NSMutableDictionary就不是线程安全的,应该保证一次只能一个线程访问它。


#######GCD使用步骤

定制任务:确定要执行的操作(方法)。
将任务添加到队列中,并按照指定的同步或异步方式执行任务。
GCD会自动将队列中的任务取出,放到对应的线程中执行。
任务的取出遵循队列的先进先出原则。
队列

GCD提供了dispatch queues(调度队列)来执行代码段,这些队列以FIFO(先进先出)的方式来管理你用GCD提交的任务。这保证了你先提交的任务先执行,即第一个任务添加到队列中就第一个开始执行,第二个添加的任务将第二个执行,直到队列的最后一个任务。
所有的调度队列(dispatch queues)自身都是线程安全的,你能通过多个现成来访问它们。
串行队列:在串行队列中,同一个队列中只有一个任务在执行,每个任务只有在前一个任务执行完成后才能开始执行。而且,你不知道在一个Block(任务)执行结束到下一个Block(任务)开始执行之间的这段时间是多长。这些任务的执行时机完全是在GCD的控制之下,你能唯一保证的是:GCD一次只能执行一个任务以及它会按照你添加到队列中的先后顺序来执行任务。在串行队列中,不会有两个任务并发执行。
并发队列:在并发队列中,你唯一能保证的是,这些任务会按照被添加的顺序开始执行,但是任务可以以任何顺序完成,你不知道在执行下一个任务是从什么时候开始,或者说任意时刻有多个Block(任务)执行,这个完全是取决于GCD。
在什么时候执行Block完全是由GCD来决定,如果一个Block的执行时间与另外一个Block重叠,GCD就会决定是否将另一个任务运行在不同的核上,除非那个核不能使用,否则GCD将通过切换上下文方式将任务运行在另一个核上。


GCD的核心概念

任务:要执行的操作(方法)。
队列:用来存放任务的集合。
将任务添加到队列,指定任务执行的方法。
任务:使用block封装,block就是一个提前准备好的代码块,在需要的时候执行。
队列:
串行队列:一个接一个的调度任务。
并发队列:可以同时调度多个任务。
主队列:全局串行队列,由主线程串行调度任务,并且只有一个。
全局队列:没有名称的并发队列。
执行任务的函数:
同步执行:当前指令不完成,就不会执行下一条指令。
异步执行:当前指令不完成,同样可以执行下一条指令


以上是概念,下面是连接文章和里面的demo
文章连接:http://www.jianshu.com/p/e6905468c780
下载:demo
喜欢的可以点下star,谢谢支持

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,014评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,796评论 3 386
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,484评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,830评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,946评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,114评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,182评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,927评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,369评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,678评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,832评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,533评论 4 335
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,166评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,885评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,128评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,659评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,738评论 2 351

推荐阅读更多精彩内容