GCD小结

GCD是基于C语言的底层API,用Block定义任务用起来非常灵活便捷.

GCD的基本思想是就将操作放在队列中去执行

(1)操作使用Blocks定义

(2)队列负责调度任务执行所在的线程以及具体的执行时间

(3)队列的特点是先进先出(FIFO)的,新添加至对列的操作都会排在队尾

关于多线程的一些概念:

GCD一共有5种队列:main queue
:主队列,在主队列中只有一个主线程,本质也是一个串行队列

high priority queue:高优先级队列

low priority queue :低优先级队列

background priority
queue:后台队列

default priority queue
:默认优先级队列,也叫做自定义队列,又分为:

1:串行队列(serial queue):会顺序执行队列的里面的任务,一次只执行一个任务.

2:并行队列(concurrent queue):会并发的执行队列里面的任务,执行顺序不确定.

常用方法:

dispatch_sync:同步操作(任务),会执行完block的任务才进行下一个任务.

dispatch_async:异步操作(任务),会把block提交给队列就立即返回,不去关心block是否完成,由队列去安排调用里面添加的block.

队列和任务的使用:

(1):串行队列加入同步任务:不会产生新线程,队列会把任务加入主线程中执行,有顺序.

(2):串行队列中加入异步任务:会产生一个子线程.队列会把任务加入到这个子线程中执行,有顺序.

(3):并行队列中加入同步任务:不会产生新线程,队列会把任务加入主线程中执行,有顺序

(4):并行队列中加入异步任务:根据需要产生多个子线程,任务没有顺序执行

(5):主线程队列和GCD创建的队列是不同的。在GCD中创建的队列优先级没有主队列高,所以在GCD中的串行队列开启同步任务里面没有嵌套任务是不会阻塞主线程

在主队列中加入同步任务:
 会造成死锁,原因是主队列中只有一个线程就是主线程,而且该线程除非关闭程序,否则一直循环执行,同步任务在主队列中优先级较高,为了能够执行任务
 
 就想抢占主线程资源来执行任务,而主线程却又默认优先处理其他操作,不肯放手.两个的优先级都很高,最终导致死锁,阻塞线程了.

在主队列中加入异步任务:主队列会先降低异步任务的优先级,等空闲时会把该异步任务放入主线程中执行,所以不会造成堵塞,一般的UI更新都在主队列的异步任务中完成.

GCD小结,布布扣,bubuko.com

时间: 2024-09-28 22:33:26

GCD小结的相关文章

iOS开发多线程网络———多线程概念及GCD

@import url(http://i.cnblogs.com/Load.ashx?type=style&file=SyntaxHighlighter.css);@import url(/css/cuteeditor.css); @import url(http://i.cnblogs.com/Load.ashx?type=style&file=SyntaxHighlighter.css);@import url(/css/cuteeditor.css); @import url(htt

iOS开发——多线程OC篇&多线程详解

多线程详解 前面介绍了多线程的各种方式及其使用,这里补一点关于多线程的概念及相关技巧与使用,相信前面不懂的地方看了这里之后你就对多线程基本上没有什么问题了! 1——首先ios开发多线程中必须了解的概念: 进程 正在进行中的程序被称为进程,负责程序运行的内存分配 每一个进程都有自己独立的虚拟内存空间 线程 线程是进程中一个独立的执行路径(控制单元) 一个进程中至少包含一条线程,即主线程 可以将耗时的执行路径(如:网络请求)放在其他线程中执行 创建线程的目的就是为了开启一条新的执行路径,运行指定的代

一个java程序员自学IOS开发之路(十三)

2015/12/09 Day 46 今天学习多线程 多线程的优缺点 优点 充分发挥多核处理器优势,将不同线程任务分配给不同的处理器,真正进入“并行运算”状态 将耗时的任务分配到其他线程执行,由主线程负责统一更新界面会使应用程序更加流畅,用户体验更好 当硬件处理器的数量增加,程序会运行更快,而程序无需做任何调整 缺点 新建线程会消耗内存空间和CPU时间,线程太多会降低系统的运行性能 iOS的三种多线程技术 NSThread  使用NSThread对象建立一个线程非常方便 但是!要使用NSThrea

012-iOS之多线程管理

前言: •进程 正在进行中的程序被称为进程,负责程序运行的内存分配 每一个进程都有自己独立的虚拟内存空间 •线程 线程是进程中一个独立的执行路径(控制单元) 一个进程中至少包含一条线程,即主线程 可以将耗时的执行路径(如:网络请求)放在其他线程中执行 创建线程:就是开启一条新的执行路径,负责程序中指定的代码运行,与主线程中的代码实现同时运行(新建一条执行路径 512K 不能杀掉一个线程!但是可以暂停.休眠) •优势 (1)充分发挥多核处理器优势,将不同线程任务分配给不同的处理器,真正进入“并行运

GCD的一些小结

GCD是基于C语言的底层API,用Block定义任务用起来非常灵活便捷. GCD的基本思想是就将操作放在队列中去执行 (1)操作使用Blocks定义 (2)队列负责调度任务执行所在的线程以及具体的执行时间 (3)队列的特点是先进先出(FIFO)的,新添加至对列的操作都会排在队尾 关于多线程的一些概念: GCD一共有5种队列:main queue :主队列,在主队列中只有一个主线程,本质也是一个串行队列 high priority queue:高优先级队列 low priority queue :

iOS GCD 编程小结

一.简单介绍 1.GCD简介? 全称是Grand Central Dispatch,可译为“牛逼的中枢调度器” 纯C语言,提供了非常多强大的函数 2.GCD优势 GCD是苹果公司为多核的并行运算提出的解决方案 GCD会自动利用更多的CPU内核(比如双核.四核) GCD会自动管理线程的生命周期(创建线程.调度任务.销毁线程) 程序员只需要告诉GCD想要执行什么任务,不需要编写任何线程管理代码 3.提示 (1)GCD存在于libdispatch.dylib这个库中,这个调度库包含了GCD的所有的东西

ios 多线程小结----- GCD篇

//3 GCD(充分利用设备的多盒)-------------屏蔽了线程,只能看见任务 队列步骤两步,定制任务,将任务添加到队列.GCD将添加的任务,放到线程中去执行,自动执行,自动释放原则:先进先出,先添加的任务先执行,有别于栈的先进后出,先添加的任务后执行 -------GCD--- GCD有两个用来执行任务的函数:同步函数,异步函数同步:按顺序执行任务,同一条线程执行(不开线程)异步:同时执行任务(开启新线程) 同步,异步,并发,串行同步:当前线程执行,不具备开启新线程的能力异步:在新线程

GCD技术小结

什么是 GCD GCD 是 libdispatch 的市场名称,而 libdispatch 作为 Apple 的一个库,为并发代码在多核硬件(跑 iOS 或 OS X )上执行提供有力支持.它具有以下优点: 1.GCD 能通过推迟昂贵计算任务并在后台运行它们来改善你的应用的响应性能. 2.GCD 提供一个易于使用的并发模型而不仅仅只是锁和线程,以帮助我们避开并发陷阱. 3.GCD 具有在常见模式(例如单例)上用更高性能的原语去优化你的代码的潜在能力. GCD 术语 Serial vs. Conc

iOS实录:GCD使用小结(一)

导语:在iOS中,多线程方案有四种:pthread.NSThread.NSOperation & NSOperationQueue 和 GCD,但是开发中GCD使用得最多,本文主要总结一下我使用GCD的情况. 一.GCD(Grand Central Dispatch)概述 1.基本概念 GCD允许程序将任务切分为多个单一任务,提交至Dispatch Queue,然后系统调度线程,实现并发或者串行地执行任务.GCD隐藏了内部线程的调度,开发者只需要关注创建或获取队列,然后将Block追加到队列中即