多线程11-21

多线程和单线程 概念

一个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.创建一个线程。线程处于新建状态,会为其分配内存,初始化属性

  1. 调用线程的start方法后,线程处于就绪状态

3.cpu调度当前线程,则当前线程处于运行现场,其他线程调用过start方法的线程处于就绪状态

  1. 线程调用sleep方法则处于阻塞状态,sleep时间到后加入就绪队列中,等待cpu的再度调用

多线程的实现方案

1,NSThread oc级别的多线程,使用更加面对对象,简单,可以直接操作线程,创建子线程,需要自动管理线程的生命周期

2.GCD c语言级别的多线程。是NSOperation的底层实现,用block代码块来表示一个任务,会自动管理线程的生命周期(创建,调度,销毁)

3.NSOperation

基于GCD,是面对对象的,比GCD多一些简单的功能。比如任务的暂停,取消回复,添加依赖

线程与进程 概念 区别与联系

进程:系统中正在运行的一个应用程序,如ios的一个app 线程:进程中任务的基本执行单元,进程要运行必须有线程,所以一个进程最少有一条线程

每个进程都在独立的,受保护的内存空间中运行 线程只是进程中任务的不同执行路径,所以没有独立的运行空间,公用 内存,资源,数据,一条线程死掉整个进程就会死掉,所以多线程的健壮性差,但多线程可以是cpu更合理地利用资源,提高效率, 使用多线程要注意线程安全(就是数据同步)

任务 队列 串行 并行 同步 异步 并发 并行

任务:一块可执行的代码段 队列:用于存放任务

串行 ,并行 说的是队列中任务的执行顺序,

    串行是一个一个执行,并行是同时执行

同步,异步 说的队列中的任务在那个线程执行

    同步是当前线程执行,异步是新开辟线程执行

    同步执行会阻塞当前线程,因为是在当前线程执行,所以必须等待当前线程的任务执行完才会执行

    异步执行:会开辟中一个新的线程来执行,所以不会堵塞当前线程

并发:逻辑上的同时发生,指的是cpu在同一时间片段内处理多个任务

并行:物理上的同时发生,指cpu在同一时刻处理多个任务

串行队列 同步执行: 在当前线程上一个一个执行 串行队列,异步执行: 在新开辟的线程上一个一个执行 并行队列,同步执行: 当前线程一个一个执行(因为同步执行不允许开辟线程) 并行队列,异步执行:开辟多个线程,一齐执行

JSRUN前端笔记, 是针对前端工程师开放的一个笔记分享平台,是前端工程师记录重点、分享经验的一个笔记本。JSRUN前端采用的 MarkDown 语法 (极客专用语法), 这里属于IT工程师。