在开始之前我们先认识几个属于名词:
1.进程(process)
一个正在运行中的可执行文件,每一个进程都有一个独立的虚拟内存空间和系统资源,包括端口权限等,且至少包含一个主线程和若干辅助线程。
进程的主线程退出时,该进程也就结束了。
2.线程(thread)
进程中一个独立代码的执行路径,线程是代码执行路径的最小分支。
一个进程中至少有一条线程,主线程
可以将耗时的线程(如:网络请求)防止其他线程中
目的:开辟一条新的路径,运行指定代码,与主线程中的代码同时执行
3队列
iOS中有两种队列,串行队列,并行队列。iOS 系统就是使用这些队列来进行任务调度的,它会根据调度任务的需要和系统当前的负载情况动态地创建和销毁线程,而不需要我们手动地管理。
4.同步&异步
区别:是否等在操作完成
同步:会等待操作完成后再执行后面的代码
异步:调用后立即返回,不会等待操作的返回结果
5.串行&并发
区别:允许同时执行任务的数量
串行:一次只能执行一个任务,当前任务结束后才执行下一个任务。
并发:允许多个任务同时执行。(多个任务同一时间间隔发生,但任何时刻点CPU只会处理一个任务)
iOS的三种多线程
1.NSTread
机那里一个线程很简单,管理多个较为困难,不推荐
2.GCD--Grand Central Dispatch
基于C语言的底层API
Block定义任务,使用简单
提供更多的控制能力及操作队列中所不能实用的底层函数
3.NSOperation/NSOpeationQueue
使用GCD实现的一套Objective-C的API
面向对象的线程技术
提供GCD不易实现的特性(限制最大并发数量,操作的依赖关系)