iOS_多线程_GCD

1、GCD串行队列+异步dispatch

说明:非常非常非常有用的操作

异步,表示会在主线程之外开新的线程,但由于 队列是串行的,故只开一个(只开一个)新的线程

当dispatch分派好block之后,主线程立即返回,继续向下执行

串行队列,表示:被分派到此队列的block们,将FIFO有序地一个接一个执行

dispatch_async说明:

立即返回,从不等待,队列决定是serially还是concurrently,block_copy(),block_release()

程序运行结果输出:

可以看到:串行队列+异步方式向队列添加block,只会新开一个线程,所有被添加的block在新开的线程里,愉快而有序地执行

2、GCD串行队列+同步dispatch (极少使用)

同步表示:不会开新线程,就在主线程上运行

串行表示:所有block一个接一个运行

3、并行队列+异步dispatch(容易失控)

开多条新线程(具体开几个无法控制),block执行没有顺序,程序员无法控制执行顺序

4、并发队列+同步dispatch

关键:因为同步,则不会开新线程,直接使用主线程,

虽然是并发队列,但由于可有一个执行路线,所以会顺序执行

5、发散思维--->串行队列先同步dispatch十个block,再异步dispatch十个block

既然是同步分派:就是在主线程上执行,完毕后,

再异步分派:开新线程,由于队列是串行,故,只会开一条新线程,一个接一个愉快地执行

6、发散思维--->并行队列中,先同步分派10个block,再异步分派10个blcok

只要是同步dispatch,就只会在主线程上运行

再异步分派,就一定会开新线程,由于是并行队列:故会开N条新线程,N数量不可控制,block们的执行顺序也不可控制

时间: 2024-11-09 06:41:03

iOS_多线程_GCD的相关文章

IOS_多线程_售票

H:/1007/01_多线程_大任务_MainViewController.m // MainViewController.m // 多线程-01.大任务 // Created by apple on 13-10-7. #import "MainViewController.h" @interface MainViewController () @property (weak, nonatomic) UIImageView *imageView; @end @implementatio

IOS_多线程_ASI_AFN_UIWebView

H:/0730/00_多线程4种售票_ViewController.h // // ViewController.h // 卖票 // // Created by apple on 13-7-29. // Copyright (c) 2013年 itcast. All rights reserved. // #import <UIKit/UIKit.h> @interface ViewController : UIViewController // 多行文本提示框 @property (wea

IOS多线程_GCD的简单使用和详细说明

//你可以先看看这个例子的效果找点感觉,再看说明 @interface yxpGCDVController () { UIImageView *_imageView; } @end @implementation yxpGCDVController - (void)viewDidLoad { [super viewDidLoad]; self.title=@"GCD"; //初始化一_ImageView _imageView=[[UIImageView alloc] initWithF

iOS_多线程(一)

在学习多线程之前首先搞清楚以下几个问题. 并发:在同一时刻,只有一条指令被执行,多条指令进行快速切换执行. 并行:在同一时刻,多个处理器可以处理多条指令 1.什么是进程? 一个运行的程序就是一个进程或一个任务 多个进程之间是具有相互独立的内存空间. 2.什么是线程? 进程当中代码的一个执行路径. 多线程:也就是说代码有多个执行路径. 3.进程与线程的关系? 一个进程至少包含一个线程(主线程),线程是程序的执行流 主线程是其他线程的父线程,所有的界面的显示操作必须在主线程进行. 一个进程中包含多个

IOS_多线程

苹果的Cocoa框架支持的多线程机制有三中NSThread.GCD.NSOperation. NSThread:是官方推荐的也是最基本的线程创建方式,但是需要开发这自己去管理线程的生命周期例如线程同步和内存共享等问题. NSOperation:如果想要多个线程并行那么就需要把线程加入队列中,NSOperationQueue提供了队列的管理方法,我们可以用addOperation把线程对象以数组的形式一次性加入到队列中,并且可以设置队列的并行数量.线程执行是有序的 GCD:Grand Centra

Java多线程学习(吐血超详细总结)

林炳文Evankaka原创作品.转载请注明出处http://blog.csdn.net/evankaka 目录(?)[-] 一扩展javalangThread类 二实现javalangRunnable接口 三Thread和Runnable的区别 四线程状态转换 五线程调度 六常用函数说明 使用方式 为什么要用join方法 七常见线程名词解释 八线程同步 九线程数据传递 本文主要讲了java中多线程的使用方法.线程同步.线程数据传递.线程状态及相应的一些线程函数用法.概述等. 首先讲一下进程和线程

Spring多线程

Spring是通过TaskExecutor任务执行器来实现多线程和并发编程的.使用ThreadPoolTaskExecutor可实现一个基于线程池的TaskExecutor.而实际开发中任务一般是非阻碍的,即异步的,所以我们要在配置类中通过@EnableAsync开启对异步的支持,并通过在实际执行的Bean的方法中使用@Async注解来声明其是一个异步任务. 实例代码: (1)配置类 package com.lwh.highlight_spring4.ch3.taskexecutor; /**

python进阶学习(一)--多线程编程

1. 多线程 概念:简单地说操作系统可以同时执行多个不用程序.例如:一边用浏览器上网,一边在听音乐,一边在用笔记软件记笔记. 并发:指的是任务数多余cpu核数,通过操作系统的各种任务调度算法,实现用多个任务"一起"执行(实际上总有一些任务不在执行,因为切换任务的熟度相当快,看上去一起执行而已) 并行:指的是任务数小于等于CPU核数,即任务真的是一起执行的. 2. 线程 概念:线程是进程的一个实体,是CPU调度和分派的基本单位. threading--单线程执行: 1 import ti

多线程的实现及其安全问题

一.进程和线程概述 1.进程:进程是一个具有独立功能的程序关于某个数据集合的一次运行活动,简单来说开启一个程序就开启了一个进程: 如果开启多个进程,它们之间是由于CPU的时间片在相互的切换: 2.线程:开启一个进程的一个任务,对于多线程:每一个线程都在争夺CPU的执行权(CPU的执行权具有随机性): 如果一个程序的执行路径有多条,那么该线程是多线程;反之,就单线程线程:线程是依赖于进程存在的! 3.Jvm是多线程 -- 至少开启了两条线程 main方法 主线程 gc() 垃圾回收线程 二.多线程