多线程-GCD的使用事列

#import "ViewController.h"

@interface ViewController ()

@end

/**

*

1.GCD底层也是用线程来实现的

2.GCD有两种执行任务的方式

01.同步dispatch_sync(避免在主线程中使用同步执行主线程任务容易死锁)

02.异步dispatch_async

3.GCD的参数:queue:队列    Block
:任务

4.同步异步的区别:

同步:在当前线程执行,顺序执行

异步:在另一条线程执行,可以开辟一个线程,利用系统空闲时间去执行

5.死锁在主队列(GCD)里面
在主线程(ui线程)同步执行任务;主队列与主线程是同一个东西;

6.主队列
同步执行某个任务的时候,会等待前面的任务执行完毕之后才去执行主队列里面的任务;但主队列是在主线程里面执行任务的;《他们两个现在
在同一个线程里面》线程是顺序执行任务的,这时候主线程会等主队列里面的任务执行完毕
,再去继续执行 ,主队列会等待主线程执行完毕才回去执行主队列里面的任务。

7.串行队列分两种

01.主队列 dispatch_get_main_queue()主队列是GCD自带的一种特殊的串行队列,放在主队列中的任务,都会放在主线程执行

02.创建一个队列

*/

@implementation ViewController

- (void)viewDidLoad {

[super viewDidLoad];

//通过GCD获得主队列

//所有队列接收队列对象都要dispatch_queue_t

//    dispatch_queue_t mainQueue = dispatch_get_main_queue();

//同步执行任务

//    dispatch_sync(mainQueue, ^{

//        NSLog(@"dispatch_sync");

//    });

//异步执行任务

//    NSLog(@"主线程执行到这里,发现一个异步执行代码,会执行异步执行的代码,但是,不会等待里面的任务执行完毕之后再继续执行主线程任务");

//    dispatch_async(mainQueue, ^{

//        NSLog(@"异步执行任务");

//    });

//    dispatch_queue_t mainQueues = dispatch_get_main_queue();

//

//    dispatch_async(mainQueues, ^{

//        NSLog(@"sssss");

//    });

//

//串行队列
有两种方式 1.主队列 2.创建队列
串行队列是按照顺序执行的

//自己创建队列的方式<串行队列>

//    dispatch_queue_t huluWaQueue = dispatch_queue_create ("湖经济可能更客观", NULL);

//    dispatch_sync(huluWaQueue, ^{

//         NSLog(@"11111");

//    });

//    dispatch_sync(huluWaQueue, ^{

//        NSLog(@"222222");

//    });

//    dispatch_sync(huluWaQueue, ^{

//        NSLog(@"333333");

//    });

//    dispatch_sync(huluWaQueue, ^{

//        NSLog(@"4444444");

//    });

//并发队列
可以指定队列任务的优先级 使用全局并发队列

//#define DISPATCH_QUEUE_PRIORITY_HIGH 2

//#define DISPATCH_QUEUE_PRIORITY_DEFAULT 0

//#define DISPATCH_QUEUE_PRIORITY_LOW (-2)

//#define DISPATCH_QUEUE_PRIORITY_BACKGROUND INT16_MIN

//GCD默认已经提供了全局的并发队列,供整个应用使用,不需要手动创建

//long identifier指定优先级

dispatch_queue_t firstQueue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0);

dispatch_queue_t secondQueue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_LOW, 0);

dispatch_queue_t thirdQueue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);

dispatch_async(firstQueue, ^{

NSLog(@"11111");

});

dispatch_async(secondQueue, ^{

NSLog(@"22222");

});

dispatch_async(thirdQueue, ^{

NSLog(@"33333");

});

}

- (void)didReceiveMemoryWarning {

[super didReceiveMemoryWarning];

// Dispose of any resources that can be recreated.

}

@end

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-12-08 04:34:48

多线程-GCD的使用事列的相关文章

多线程 GCD

n多线程 GCD n简介 n什么是GCD p全称是Grand Central Dispatch,可译为“牛逼的中枢调度器” p纯C语言,提供了非常多强大的函数 p nGCD的优势 pGCD是苹果公司为多核的并行运算提出的解决方案 pGCD会自动利用更多的CPU内核(比如双核.四核) pGCD会自动管理线程的生命周期(创建线程.调度任务.销毁线程) p程序员只需要告诉GCD想要执行什么任务,不需要编写任何线程管理代码 n任务和队列 nGCD中有2个核心概念 p任务:执行什么操作 p队列:用来存放任

【iOS】多线程GCD

GCD(Grand Central Dispatch) : 牛逼的中枢调度器.苹果自带,纯C语言实现,提供了非常多且强大的函数,它可以提高代码的执行效率与多核的利用率. 一.GCD的基本使用 1.GCD中的两个核心概念: ?任务: 执行什么任务. ?队列: 用来存放任务. (用来调度任务) 2.GCD使用的2个步骤: ?1.定制任务. (确定想做的事情) ?2.将任务添加到队列中. ?GCD会自动将队列中的任务取出, 放到对应的线程中执行. ?遵循队列的FIFO原则: 先进先出. 3.同步和异步

iOS开发之多线程——GCD介绍

iOS开发之多线程——GCD的介绍 一.简单介绍 1.GCD ( Grand Central Dispatch) 可以翻译为“中枢调度器”.纯C语言,并且提供了非常强大的函数. 2.GCD 有什么优势: GCD是苹果公司为多核的并行运算提出的解决方案 GCD会自动利用更多地CPU 内核 (比如双核.四核) GCD会自动管理线程的生命周期 (创建线程.调度任务.销毁线程) 程序猿只需要告诉GCD想要执行设呢任务,不需要编写任何线程管理代码. 二.任务和队列 GCD中有两个核心概念 (1)任务: 执

iOS 多线程GCD的基本使用

<iOS多线程简介>中提到:GCD中有2个核心概念:1.任务(执行什么操作)2.队列(用来存放任务) 那么多线程GCD的基本使用有哪些呢? 可以分以下多种情况: 1.异步函数 + 并发队列 /** * 异步函数 + 并发队列:可以同时开启多条线程 */ - (void)asyncConcurrent { // 1.创建一个并发队列 // dispatch_queue_create(const char *label, dispatch_queue_attr_t attr); // label

iOS多线程 GCD

iOS多线程 GCD Grand Central Dispatch (GCD)是Apple开发的一个多核编程的解决方法. dispatch queue分成以下三种: 1)运行在主线程的Main queue,通过dispatch_get_main_queue获取. /*! * @function dispatch_get_main_queue * * @abstract * Returns the default queue that is bound to the main thread. *

iOS多线程GCD

Grand Central Dispatch (GCD)是Apple开发的一个多核编程的解决方法. dispatch queue分成以下三种: 1)运行在主线程的Main queue,通过dispatch_get_main_queue获取. /*! * @function dispatch_get_main_queue * * @abstract * Returns the default queue that is bound to the main thread. * * @discussi

qt 下tablewidget 中要单独使一列不能编辑怎么办?

qt 下tablewidget 中要单独使一列不能编辑怎么办???最好能用一个button 控件控制 2012-03-31 19:57南山杨木 | 分类:其他编程语言 | 浏览2658次 分享到: 2012-04-01 16:29 提问者采纳 热心网友 修改该列item的flags. 例如: #include <QApplication>#include <QTableWidget>#include <QTableWidgetItem>int main(int argc

IOS 多线程GCD的使用[转载于新浪微博, 原作者:太阳石]

原文 在红黑联盟上看到一篇关于多线程GCD的教程文章,写的深入浅出,特转载于此,以备不时之需.原文链接另:补充两个GCD代码,都是Xcode snippet里面提供的:1.Dispatch After主要用于延迟执行一些代码.例子: int64_t delayInSeconds = 1.0; dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, delayInSeconds * NSEC_PER_SEC); dispatch_aft

深入IOS多线程 GCD(一)

一,什么是GCD GCD是异步执行任务的技术之一,一般将应用程序中记述的线程管理用的代码在系统级中实现.开发者只需要定义想执行的任务并追加到适当的dispatch queue中,GCD就能生成必要的线程并计划执行任务.由于线程管理师作为系统的一部分来实现的,因此可统一管理,也可执行任务,这样就比以前的线程更有效率. 也就是说GCD用我们难以置信的非常简单的记述方法,实现了极为复杂的多线程编程,可以说这是一项划时代的技术.下面是使用了GCD源码的例子,虽然稍微抽象,但从中也能感受到GCD的威力 d