[iOS] 多线程基本概念

2021-01-20  本文已影响0人  沉江小鱼

1.进程&线程

1.1 定义

进程

线程

1.2 关系

进程和线程之间的关系主要涉及下面两个方面:

还有其他一些方面有所不同:

1.3 线程和 RunLoop 的关系

关于 RunLoop 的部分,之后会详细介绍,主要有以下几点:

2. 多线程

2.1 原理

对于单核 CPU同一时间CPU 只能处理一条线程,即只有一条线程在工作,所以多线程的本质就是 CPU 在不同的任务中快速切换,由于 CPU 调度线程的时间足够快,就造成了多条线程”同时“执行的效果。

多线程的意义在于能适当提高程序的执行效率,提高资源的利用率。
但是线程的开辟需要占用一定的内存空间,默认情况下,一个线程占用512KB,所以如果开启大量线程,会占用内存空间,降低程序的性能,而且多线程程序也会更复杂,比如线程通信,数据共享。

2.2 多线程生命周期

主要分为 5 个部分:新建 - 就绪 - 运行 - 阻塞 - 死亡,如下图所示:


image.png

简单来说,运行中的线程拥有一段可以执行的时间(时间片):

线程的exitcancel 方法:
exit 会强行终止线程,后续的代码不会执行
cancel取消当前线程,但是正在执行的线程,会一直执行到结束

CPU 是根据线程的优先级来调度的,但并不是说线程的优先级越高,就意味着任务的执行越快,而是说优先级高的线程有更大的可能会被 CPU 调度。

线程执行的快慢,除了要看优先级,还需要看资源的大小,即任务复杂度以及 CPU 调度情况。

2.3 线程池

线程池是一种多线程处理形式,处理过程中将任务添加到队列,然后在创建线程后自动启动这些任务。线程池维护着多个线程,等待 CPU 调度,主要是为了节省短时间任务的线程创建和销毁的代价,可用线程数量应该取决于可用的并发处理器、处理器内核、内存等,例如,线程数一般取CPU 的数量 + 2 比较合适,线程数过多则会导致额外的线程切换开销。

image.png

上面提到的饱和策略,主要有以下四种(在 iOS 中并没有找到以下 4 种策略):

2.4 并发和并行

注意:并发是指多个事件在同一时间间隔内发生;并行是指多个事件在同一时刻同时发生。

3. iOS 中的多线程实现方案

主要由 4 中,如图:


image.png

4. 线程安全

当多个线程同时访问一块资源时,容易引发数据错乱和数据安全问题,有以下两种解决方案:

5. 线程间通讯
线程间通讯
上一篇 下一篇

猜你喜欢

热点阅读