(五)iOS开发之多线程—线程的状态

(五)iOS开发之多线程—线程的状态,第1张

一状态概述

新建线程,线程就绪,执行线程,sleep,等待同步锁

NSThread thread = [[NSThread alloc] initWithTarget:selfselector:@selector(run)object:nil];

就绪cpu可以调用执行

[thread start];

概图:

二控制线程状态

1启动线程

- (void)start;

//进入就绪状态->运行状态。当线程任务执行完毕,自动进入死亡状态

2阻塞(暂停)线程

+ (void)sleepUntilDate:(NSDate)date;

+ (void)sleepForTimeInterval:(NSTimeInterval)ti;

//进入阻塞状态

3强制停止线程

+ (void)exit;

//进入死亡状态

Dome:

>

1进程 

 具有一定独立功能的程序关于某次数据集合的一次运行活动,他是 *** 作系统分配资源的基本单位。

进程是指系统正在运行的一个应用程序,就是一段程序的执行过程。

各进程之间相互独立,每个进程都运行在受保护的内存空间内,拥有独立运行所需的全部资源。

2 线程

进程的最小执行单元。线程是一个进程的实体。

一个进程要想执行任务,就必须至少又一个线程,当程序启动时,系统默认开启一条线程,也就是主线程。

3、 进程与线程的关系

线程是进程的执行单元,进程的所有任务都在线程中执行

线程是CPU分配和执行任务的最小单元

一个程序可以有多进程,一个进程可以有多线程 ,但是一个进程至少有一个线程

同一个进程内的线程共享进程内的资源

4 多线程原理

同一时间内单核CPU 只执行一个线程,多线程是CPU 在单位时间内在多个线程之间切换,造成多个线程被同时执行的假象。

多核CPU 就可以执行多个线程

多线程的目的是同步执行多个线程,来提高运行效率

5、多线程的优缺点

有点:提高执行效率 能够提高CPU的使用率

缺点:占用一定的系统内存空间  线程越多 CPU 调度线程的开销越大 程序设计复杂(线程之间的通信 数据共享)

6、多线程并发 与并行区别

并发:在一条线程上快速切换 

并行: 利用多核CPU ,多线程同时进行

7、IOS 中的多线程

NSThread 需要手动创建 不需要销毁 子线程通信很难

GCD c语言,充分利用了设备的多核,自动管理线程生命周期。比NSOperation效率更高。

NSOperation  基于gcd封装,更加面向对象,比gcd多了一些功能。

8、多个网络请求如何执行下一步

使用GCD的dispatch_group_t  

创建一个dispatch_group_t

每次网络请求前先dispatch_group_enter,请求回调后再dispatch_group_leave,enter和leave必须配合使用,有几次enter就要有几次leave,否则group会一直存在。

当所有enter的block都leave后,会执行dispatch_group_notify的block。

    NSString str = @">

线程和进程在我们开发中,跟我们一直形影不离,那么什么是进程,什么是线程,它们又有什么关系,这篇文章将为您简单介绍。

线程概念

进程概念

地址空间:同⼀进程的线程共享本进程的地址空间( TLS是本地的线程栈存空间,线程的局部空间是某些 *** 作系统为线程提供的私有空间,只具备有限的容量,并不属于线程,由 *** 作系统单独安排的 ),⽽进程之间则是独⽴的地址空间。

资源拥有:同⼀进程内的线程共享本进程的资源如内存、I/O、cpu等,但是进程之间的资源是独⽴的。

优点:

缺点:

时间⽚的概念:CPU在多个任务直接进⾏快速的切换,这个时间间隔就是时间⽚。

多线程同时执行

如果线程非常多

互斥锁⼩结

互斥锁参数

nonatomic⾮原⼦属性

atomic原⼦属性(线程安全),针对多线程设计的,默认值,保证同⼀时间只有⼀个线程能够写⼊(但是同⼀个时间多个线程都可以取值)

atomic本身就有⼀把锁(⾃旋锁)

单写多读:单个线程写⼊,多个线程可以读取

atomic:线程安全,需要消耗⼤量的资源

nonatomic:⾮线程安全,适合内存⼩的移动设备

iOS开发建议

所有属性都声明为nonatomic

尽量避免多线程抢夺同一块资源

尽量将加锁,资源抢夺的业务逻辑交给服务器处理,减少APP的压力

这篇文章简单介绍了线程与进程的概念,烦请大家不吝赐教。

一、RunLoop是什么?

事件循环,绝对不止是死循环这么简单的一个回答。实质上就是runloop内部状态的转换。

1用户态:应用程序都是在用户态,平时开发用到的api等都是用户态的 *** 作

2内核态:系统调用,牵涉到 *** 作系统,底层内核相关的指令。

runloop实际上是计算机内部进行的资源调度 *** 作。

iOS中的runloop就是循环来处理程序运行过程中出现的各种事件(比如说触摸事件、UI刷新事件、定时器事件、Selector事件),从而保持程序的持续运行,而在没有任何任务处理时,会让线程休眠,从而节省 CPU 资源,提高程序性能。

iOS中的runloop是用来处理事件的循环,NSRunloop是基于CFRunloop的封装,是线程不安全的;CFRunloop是一套C接口,是线程安全的。

二、runloop有哪些使用场景

1,检测crash,crash的起死回生;

2,线程的耦合;

3,监测APP的卡顿;

4,线程保活(让线程长时间存活,而不被自动销毁掉)等。

三,runloop的组成?

CFRunLoopRef //runloop对象包含以下内容:

CFRunLoopModeRef//运行模式

CFRunLoopObserverRef

CFRunLoopTimerRef

CFRunLoopSourceRef//sources源(事件源)

sources包含source0和source1,

source1:是基于Port的系统内核事件,主动唤醒,是基于字典的(key-value)。

source0:是非基于Port的,是用户事件,不能主动触发,需要手动唤醒(weakup),事件源一般存放在数组中,

runloop要想正常启动,需要添加一个source源,或者一个timer,有三种当方式:addPort,addTimer,CFRunloopAddSource。

四,runloop与线程的关系?

线程与runloop是一一对应关系,由runloop的foundation的CFRunloopGet0源码可以看出,线程与runloop是以键值对的形式存储,key值存当前线程,value值存与线程对应的runloop。

1,(线程与runloop是一一对应关系)一条线程对应一个RunLoop对象,每条线程都有唯一一个与之对应的 RunLoop 对象。

RunLoop 并不保证线程安全。我们只能在当前线程内部 *** 作当前线程的 RunLoop 对象,而不能在当前线程内部去 *** 作其他线程的 RunLoop 对象方法。

2,RunLoop 对象在第一次获取 RunLoop 时创建,销毁则是在线程结束的时候。

3,主线程的 RunLoop 对象系统自动帮助我们创建好了(原理如 13 所示),而子线程的 RunLoop对象需要我们主动创建和维护。

五,主线程需要保活吗?

子线城需要事件源,线程才能保活。

主线程不需要,(值为1)底层源码分析得。

六,runloop如何启动?,启动方式有哪些?

三种方式:run,runUntilDate,RunMode:beforDate。

前两种底层其实是无限循环调用RunMode方法,使用后runloop不会停止,故一般使用第三种,启动一次runloop,调用停止runloop方法后,便可结束runloop。

七,如何停止runloop?

CFRunLoopStop

若用strong修饰thread,需将thread设置为nil。

ViewController释放后,也需要需将thread设置为nil,防止内存泄露。

八,runloop原理?

在每次运行开启RunLoop的时候,所在线程的RunLoop会自动处理之前未处理的事件,并且通知相关的观察者。

具体的顺序如下:

通知观察者RunLoop已经启动

通知观察者即将要开始的定时器

通知观察者任何即将启动的非基于端口的源

启动任何准备好的非基于端口的源

如果基于端口的源准备好并处于等待状态,立即启动;并进入步骤9

通知观察者线程进入休眠状态

将线程置于休眠知道任一下面的事件发生:

某一事件到达基于端口的源

定时器启动

RunLoop设置的时间已经超时

RunLoop被显示唤醒

通知观察者线程将被唤醒

处理未处理的事件

如果用户定义的定时器启动,处理定时器事件并重启RunLoop。进入步骤2

如果输入源启动,传递相应的消息

如果RunLoop被显示唤醒而且时间还没超时,重启RunLoop。进入步骤2

通知观察者RunLoop结束。

以上就是关于(五)iOS开发之多线程—线程的状态全部的内容,包括:(五)iOS开发之多线程—线程的状态、ios 多次请求多线程怎么处理、ios 线程与进程等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/9265745.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-26
下一篇 2023-04-26

发表评论

登录后才能评论

评论列表(0条)

保存