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-10-13 22:15:12

GCD的一些小结的相关文章

iOS中GCD的使用小结

本篇博客共分以下几个模块来介绍GCD的相关内容: 多线程相关概念 多线程编程技术的优缺点比较? GCD中的三种队列类型 The main queue(主线程串行队列) Global queue(全局并发队列) Custom queue (自定义队列) Group queue (队列组) GCD中一些系统提供的常用dispatch方法 多线程相关概念 进程与线程 进程概念: 进程是程序在计算机上的一次执行活动,打开一个app,就开启了一个进程,可包含多个线程. 线程概念: 独立执行的代码段,一个线

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追加到队列中即

GCD的小结

同步和异步的区别 同步:在当前线程中执行 异步:在另一条线程中执行 有4个术语比较容易混淆:同步.异步.并发.串行 同步和异步决定了要不要开启新的线程 同步:在当前线程中执行任务,不具备开启新线程的能力 异步:在新的线程中执行任务,具备开启新线程的能力 并发和串行决定了任务的执行方式 并发:多个任务并发(同时)执行 串行:一个任务执行完毕后,再执行下一个任务

(五十五)iOS多线程之GCD

GCD的全称为Grand Central Dispatch,翻译为大中央调度,是Apple开发的一个多线程编程解决方法. 进程和线程的概念: 正在进行中的程序被称为进程,负责程序运行的内存分配,每一个进程都有自己独立的虚拟内存空间. 线程是进程中一个独立的执行路径,即主线程,主线程有1M的栈区,对于耗时的执行路径,可以放在子线程(512K栈区)中执行. Tip:新建线程会消耗内存空间和CPU事件,线程太多会降低系统的运行性能,多线程是通过CPU时分复用实现的. Tip:多线程是为了并发执行多项任

iOS开发多线程篇 05 —GCD介绍

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