码迷,mamicode.com
首页 > 移动开发 > 详细

iOS 多线程知识总结 GCD基础知识

时间:2015-09-19 21:10:08      阅读:172      评论:0      收藏:0      [点我收藏+]

标签:

进程的基本概念:
     1.每一个进程都是一个一个应用程序,都有独立的内存空间,一般来说一个应用程序存在一个进程存在一个进程,但也有多个进程的情况。
    2.同一个进程中的线程共享内存中内存中资源。
多线程的基本概念:
     1.每一个程序都有一个主线程,程序启动时创建(调用main函数来启动)
     2.主线程的生命周期是和其他应用程序绑定的,程序退出时,主线程也就停止了。
     3.多线程技术表示,一个应用程序有多个线程,使用多线程能提高CPU的使用效率,防止线程阻塞
    4.任何有可能阻塞主线程的任务不要在主线程中执行(例如访问网络)
 
线程使用不是无节制的:
       1.iOS中的主线程的堆栈大小是1M
       2.从第二个线程开始都是512KB
       3.以上这些数值不能通过编译器开关或者线程api函数更改
只有主线程有直接修改UI的能力。
 
iOS的三种多线程技术:
       1.NSThread每个NSThread对象对应一个线程,轻量级。
       2NSOperation/NSOperationQueue面向对象的线程技术。
       3.GCD——Grand Central Dispatch 是基于C语言的框架,可以充分利用多核,也是苹果官方推荐使用的多线程技术。
 
三种多线程技术的对比:
      1.NSThread:优点:NSThread比其他俩个轻量级,使用简单。
                           缺点:需要自己管理线程的生命周期、线程同步、加锁、睡眠以及唤醒等。线程同步对数据的加锁会有一定的系统开销
 
       2.NSOpertion:不需要关心线程管理,数据同步的事情,可以把精力放在自己需要执行的操作上。NSOpertion是面向对象的。
 
      3.GCD:GCD是由苹果开发的一个多核编程的解决方案。iOS4.0+才能使用,是替代NSThread,NSOperation的高效和强大的技术,GCD是基于C语言的

GCD是苹果公司为多核的并行运算提出的解决方案

GCD会自动利用更多的CPU内核(比如双核、四核)

GCD会自动管理线程的生命周期(创建线程、调度任务、销毁线程)

程序员只需要告诉GCD想要执行什么任务,不需要编写任何线程管理代码
 
 GCD中有两个核心概念:
(1)任务:执行什么操作
(2)队列:存放任务
 
队列:
 
 1.串行队列:添加到队列中的任务是一个一个执行的
 
 2.并行(发)队列:添加到队列中的任务是多个同时执行的
 
 3.主队列:里面的任务都是在主线程执行的,可以理解为主队列就是串行队列的一种
 
 4.全局队列:并行(发)队列
 
同步、异步:
 1、同步:需要后面的任务等待,不会开启新的线程,会直接使用当前的线程
 
 2、异步:不需要后面的任务等待,会开启新的线程

(1)用同步的方式执行任务 dispatch_sync(dispatch_queue_t queue, dispatch_block_t block);

参数说明:

queue:队列

block:任务

 
  (2)用异步的方式执行任务 dispatch_async(dispatch_queue_t queue, dispatch_block_t block);
 
3.同步和异步的区别

同步:在当前线程中执行

异步:在另一条线程中执行

说明:
同步函数不具备开启线程的能力,无论是什么队列都不会开启线程;异步函数具备开启线程的能力,开启几条线程由队列决定(串行队列只会开启一条新的线程,并发队列会开启多条线程)。

同步函数

(1)并发队列:不会开线程

(2)串行队列:不会开线程

异步函数

(1)并发队列:能开启N条线程

(2)串行队列:开启1条线程

 

 

凡是函数中,各种函数名中带有create\copy\new\retain等字眼,都需要在不需要使用这个数据的时候进行release。

GCD的数据类型在ARC的环境下不需要再做release。
CF(core Foundation)的数据类型在ARC环境下还是需要做release。 
异步函数具备开线程的能力,但不一定会开线程
 
 

iOS 多线程知识总结 GCD基础知识

标签:

原文地址:http://www.cnblogs.com/wzh521/p/4822139.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!