苹果多线程网络编程之-GCD队列与任务的理解

今天就 iOS 的多线程 GCD 的使用做了一些总结和理解。

GCD,Grand Central Dispatch,是Apple开发的一个多核编程的解决方法。

GCD其实就是创建/获取一个队列,在 Block 块或方法(函数)里写需要执行的任务代码块,然后将任务放到合适的队列里执行。GCD队列呢,分三种:主队列(串行队列)、全局队列(并行队列)、自定义队列(自定义)。任务执行方法呢,又分为同步执行和异步执行。至于串行队列、并行队列,同步执行、异步执行的特点,自行去学习,这里不做过多阐述。大概意思就是

//同步:在当前线程中执行,不会开新的线程

//异步:会开新的线程,任务在新的线程中执行

//串行:顺序,一个一个的执行(一个执行完才执行下一个)

//并行:多个任务同时执行(可以将队列中的任务全部取出来,只要有线程就可以被执行)

下面介绍三种队列的获取和创建方法。

//1.主队列
    /*
     主队列:串行队列,通过dispatch_get_main_queue();获取主队列。
     串行队列异步执行:先执行完 task1,再执行 task2
    */
    dispatch_queue_t mainQueue = dispatch_get_main_queue();
    dispatch_async(mainQueue, ^{
        for (int i = 0; i < 10; i ++) {
            NSLog(@"task1");
        }

    });

    dispatch_async(mainQueue, ^{
        for (int i = 0; i < 10; i ++) {
            NSLog(@"task2");
        }
    });
 //2.全局队列:
    /*
     全局队列:并行队列。用dispatch_get_global_queue(0, 0);获取。
     参数1:标识,随意设,一般写0。
     参数2:4种全局队列,有优先级区分。一般也写0
     DISPATCH_QUEUE_PRIORITY_HIGH > DISPATCH_QUEUE_PRIORITY_DEFAULT > DISPATCH_QUEUE_PRIORITY_LOW > DISPATCH_QUEUE_PRIORITY_BACKGROUND
     并行队列,异步执行:task1和task2交叉执行,1-2-1-2...
    */
    dispatch_queue_t globalQueen = dispatch_get_global_queue(0, 0);
    dispatch_async(globalQueen, ^{
        for (int i = 0; i < 10; i ++) {
            NSLog(@"task1");
        }

    });

    dispatch_async(globalQueen, ^{
        for (int i = 0; i < 10; i ++) {
            NSLog(@"task2");
        }
    });
 //3.自定义队列
    /*
     自定义队列,需要dispatch_queue_create("www.com", DISPATCH_QUEUE_CONCURRENT);来创建
     参数1:标识,随意设置字符串。注意:GCD 是 C 语言的封装,所以要用""而非@“”
     参数2:设置并行队列还是串行队列。
         DISPATCH_QUEUE_CONCURRENT//并行队列异步执行:task1和 task2随机执行
         DISPATCH_QUEUE_SERIAL//串行队列异步执行:先执行完task1,再执行 task2
    */
    dispatch_queue_t queue1 = dispatch_queue_create("www.com", DISPATCH_QUEUE_CONCURRENT);
    dispatch_async(queue1, ^{
        for (int i = 0; i < 10; i ++) {
            NSLog(@"task1");
        }
    });
    dispatch_async(queue1, ^{
        for (int i = 0; i < 10; i ++) {
            NSLog(@"task2");
        }
    });
时间: 2024-12-17 11:57:50

苹果多线程网络编程之-GCD队列与任务的理解的相关文章

iOS多线程开发小demo7 GCD队列组

// DYFViewController.m // 623-08-队列组 // // Created by dyf on 14-6-23. // Copyright (c) 2014年 ___FULLUSERNAME___. All rights reserved. // #import "DYFViewController.h" @interface DYFViewController () @property (weak, nonatomic) IBOutlet UIImageVi

对多线程网络编程的理解

本文主要涉及,线程的构建,线程之间的通信以及网络源端和目的端的通信接口的操作这三个问题. 一.线程的创建 对于线程的创建,首先要明确使用线程的目的,使用线程给我们的程序能够带来什么好处.结合我的经验,我认为使用线程的好处主要有: 1.线程是一个独立运行的个体,它可以独立完成我们交给它的任务,而不需要我们在程序中主动显式调用: 2.当程序处理的问题及逻辑庞大时,显然,线程可以降低主线程的复杂性,使程序逻辑较为清楚:同时,方便我们进行调试,根据线程ID,迅速找到问题: 3.对于现今多核CPU的发展,

多线程 网络编程 文件上传案例多线程

Day13 多线程 3).多线程的好处: 提高程序的运行效率,提高用户的体验度. 创建新的线程: *    定义类继承Thread *    重写方法run *    创建Thread子类的对象 *    调用子类对象的方法 start() * *  为什么继承Thread *    Thread类是线程对象类 *    继承了Thread,子类也是线程对象 * *  为什么重写run *    Sun工程师,不清楚其他人员用线程做什么 *    全部写在run中 * *  为什么调用start

iOS 网络编程模式总结

IOS 可以采用三类api 接口进行网络编程,根据抽象层次从低到高分别为socket方式.stream方式.url 方式. 一 .socket 方式 IOS 提供的socket 方式的网络编程接口为CFSocket.CFSocket是BSD sockets的抽象和封装,CFSocket提供BSD sockets几乎所有的功能,并与run loop集成,用来实现多线程网络编程和网络事件监听.基于 CFSocket可以实现各种类型的 socket编程,包括stream-based 的sockets(

网络编程懒人入门(六):史上最通俗的集线器、交换机、路由器功能原理入门

1.前言 即时通讯网整理了大量的网络编程类基础文章和资料,包括<TCP/IP协议 卷1>.<[通俗易懂]深入理解TCP协议>系列.<网络编程懒人入门>系列.<不为人知的网络编程>系列.<P2P技术详解>系列.<高性能网络编程>系列.甚至还有图文并貌+实战代码的<NIO框架入门>等,目的是帮助即时通讯类应用的开发者,至少要掌握网络编程最基本的原理,所谓知其然更要知其所以然.尤其现在移动网络大行其道的时代,在网络环境如此复杂的

[转帖]脑残式网络编程入门(二):我们在读写Socket时,究竟在读写什么?

脑残式网络编程入门(二):我们在读写Socket时,究竟在读写什么? http://www.52im.net/thread-1732-1-1.html 1.引言 本文接上篇<脑残式网络编程入门(一):跟着动画来学TCP三次握手和四次挥手>,继续脑残式的网络编程知识学习 ^_^. 套接字socket是大多数程序员都非常熟悉的概念,它是计算机网络编程的基础,TCP/UDP收发消息都靠它.我们熟悉的web服务器底层依赖它,我们用到的MySQL关系数据库.Redis内存数据库底层依赖它.我们用微信和别

[转帖]脑残式网络编程入门(一):跟着动画来学TCP三次握手和四次挥手

脑残式网络编程入门(一):跟着动画来学TCP三次握手和四次挥手 http://www.52im.net/thread-1729-1-1.html 1.引言 网络编程中TCP协议的三次握手和四次挥手的问题,在面试中是最为常见的知识点之一.很多读者都知道"三次"和"四次",但是如果问深入一点,他们往往都无法作出准确回答. 本篇文章尝试使用动画图片的方式,来对这个知识点进行"脑残式"讲解(哈哈),期望读者们可以更加简单.直观地理解TCP网络通信交互的本

网络编程懒人入门(九):通俗讲解,有了IP地址,为何还要用MAC地址?

1.前言 标题虽然是为了解释有了 IP 地址,为什么还要用 MAC 地址,但是本文的重点在于理解为什么要有 IP 这样的东西.本文对读者的定位是知道 MAC 地址是什么,IP 地址是什么. (本文同步发布于:http://www.52im.net/thread-2067-1-1.html) 2.关于作者 翟志军,个人博客地址:https://showme.codes/,Github:https://github.com/zacker330.感谢作者的原创分享. 作者的另一篇<即时通讯安全篇(七)

多线程编程4 - GCD

一.简介 在iOS所有实现多线程的方案中,GCD应该是最有魅力的,因为GCD本身是苹果公司为多核的并行运算提出的解决方案.GCD在工作时会自动利用更多的处理器核心,以充分利用更强大的机器.GCD是Grand Central Dispatch的简称,它是基于C语言的.如果使用GCD,完全由系统管理线程,我们不需要编写线程代码.只需定义想要执行的任务,然后添加到适当的调度队列(dispatch queue).GCD会负责创建线程和调度你的任务,系统直接提供线程管理 二.调度队列(dispath qu