iOS多线程基本介绍

2019-04-25  本文已影响0人  我是晶锅

多线程

1、线程的定义
2、进程的定义
3、进程与线程的关系
4、多线程的意义
5、多线程的原理

cpu在单位时间片里快速在各个线程之间切换。实现假象的同时执行。


image.png
6、多线程在iOS中实现的技术方案
image.png
7、多线程的生命周期

多线程在线程池中主要有下图这几种状态:当创建后,有任务就会被CPU调度,执行任务,此时可能阻塞,任务执行完毕就退出。
阻塞之后如果需要会再次添加到线程池中,等待下次调度。


image.png
8、线程添加到线程池

线程添加到线程池是有原则的,因为线程池的大小是一定的。
主要条件有三个:

饱和策略

苹果提供了api可以进行设置

线程和RunLoop的关系

  1. runloop与线程是一一对应的,一个runloop对应一个核心的线程,为什么说是核心的,是因为runloop是可以嵌套的,但是核心的只能有一个,他们的关系保存在一个全局的字典里。
  2. runloop是来管理线程的,当线程的runloop被开启后,线程会在执行完任务后进入休眠状态,有了任务就会被唤醒去执行任务。
  3. runloop在第一次获取时被创建,在线程结束时被销毁。
  4. 对于主线程来说,runloop在程序一启动就默认创建好了。
  5. 对于子线程来说,runloop是懒加载的,只有当我们使用的时候才会创建,所以在子线程用定时器要注意:确保子线程的runloop被创建,不然定时器不会回调。
    RunLoop和线程在一个字典中呈现一一对应的关系,其中线程的指针为key;RunLoop使得线程存活,也就是常驻;线程退出时使得RunLoop结束。
C于OC的桥接小知识
为什么要在主线程更新UI?

苹果就是这样设计的,这是一套设计的标准。
苹果要求在主线程中更新UI操作,操作系统便于执行;
为了用户体验,一些UI上的交互肯定是给用户直接交互比较好,多数情况下,UI是直接展现给用户的,所以在主线程展示不至于卡顿或者突兀。

如何办到的手动控制线程生命周期

因为GCD完全是自动控制线程生命周期,只需要将任务交给他执行,执行完毕会自动控制销毁,所以有时候并不能完全满足我们的要求,比如有时候我们想要取消正在执行的任务时。所以一般可以重写start等方法来实现。

上一篇下一篇

猜你喜欢

热点阅读