一个app就是一个进程,app如果只有一个主线程,就是一个单线程的app 一个app有多个线程就是多线程app
在ios 中,多线程一种实现多任务并发执行的技术,允许同时执行多个任务,可以更合理的利用cpu资源,提高效率,在app中使用多线程最大的作用是防止用户界面卡顿
同一时刻,cpu只能执行一个线程,多线程并发执行,是cpu在线程间的快速调用而造成的同时执行的假象,只要cpu的调用速度足够高,用户就感觉不到cpu在线程间的切换,看到的时多个线程同时执行
优点: 1,可以适当提高程序的执行效率 2.可以适当提高资源的利用率 3.可以防止用户界面卡顿 缺点: 1,开辟线程需要内存,开辟的越多,占用的内存越大 2.开辟的线程越多,每一个线程被调用的几率就越低,而且花在调度上的开销就越大,有可能导致cpu累死 3.开辟的线程越多,程序的设计会越复杂,进程的健壮性就越差,而且考虑的问题越多,比如线程间的通信,数据安全,数据共享等。
ios 程序启动后,会在main方法自动启动一条线程。该线程称作主线程,又叫UI线程
主线程的作用: 1.刷新UI 2 处理各种UI事件,比如点击,滚动等
注意:在主线程中不要处理耗时操作,会严重影响UI的流畅度,给人卡顿的感觉
新建---就绪===运行----死亡---堵塞 由于线程是并发执行的,所以线程会在就绪和,运行间来回切换
1.创建一个线程。线程处于新建状态,会为其分配内存,初始化属性
3.cpu调度当前线程,则当前线程处于运行现场,其他线程调用过start方法的线程处于就绪状态
1,NSThread oc级别的多线程,使用更加面对对象,简单,可以直接操作线程,创建子线程,需要自动管理线程的生命周期
2.GCD c语言级别的多线程。是NSOperation的底层实现,用block代码块来表示一个任务,会自动管理线程的生命周期(创建,调度,销毁)
3.NSOperation
基于GCD,是面对对象的,比GCD多一些简单的功能。比如任务的暂停,取消回复,添加依赖
进程:系统中正在运行的一个应用程序,如ios的一个app 线程:进程中任务的基本执行单元,进程要运行必须有线程,所以一个进程最少有一条线程
每个进程都在独立的,受保护的内存空间中运行 线程只是进程中任务的不同执行路径,所以没有独立的运行空间,公用 内存,资源,数据,一条线程死掉整个进程就会死掉,所以多线程的健壮性差,但多线程可以是cpu更合理地利用资源,提高效率, 使用多线程要注意线程安全(就是数据同步)
任务:一块可执行的代码段 队列:用于存放任务
串行 ,并行 说的是队列中任务的执行顺序,
串行是一个一个执行,并行是同时执行
同步,异步 说的队列中的任务在那个线程执行
同步是当前线程执行,异步是新开辟线程执行
同步执行会阻塞当前线程,因为是在当前线程执行,所以必须等待当前线程的任务执行完才会执行
异步执行:会开辟中一个新的线程来执行,所以不会堵塞当前线程
并发:逻辑上的同时发生,指的是cpu在同一时间片段内处理多个任务
并行:物理上的同时发生,指cpu在同一时刻处理多个任务
串行队列 同步执行: 在当前线程上一个一个执行 串行队列,异步执行: 在新开辟的线程上一个一个执行 并行队列,同步执行: 当前线程一个一个执行(因为同步执行不允许开辟线程) 并行队列,异步执行:开辟多个线程,一齐执行