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

进程的基本概念:
     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会自动管理线程的生命周期(建立线程、调度任务、销毁线程)api

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

(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.同步和异步的区别

同步:在当前线程中执行 异步

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

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

同步函数 函数

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

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

异步函数

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

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

 

 

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

GCD的数据类型在ARC的环境下不须要再作release。
CF(core Foundation)的数据类型在ARC环境下仍是须要作release。 
异步函数具有开线程的能力,但不必定会开线程
相关文章
相关标签/搜索