多线程一些基本概念
2021-06-29 本文已影响0人
Henry________
1、线程进程
1.1 进程
- 进程是
系统资源分配的最小单位
,在iPhone中就是一个应用程序; -
进程中的任务都是由线程来执行
; -
进程至少有一条线程
,在进程开始执行时默认开启
,也就是常说的:主线程; - 每个进程的
资源、地址空间都是相互独立
的(安卓会涉及到多进程开发);
1.2 线程
- 线程是进程
执行任务的基本单元
; - 进程中线程之间是
共享资源和地址空间
; -
进程中至少有一条线程
;
1.3 区别与联系
- 进程之间
资源、地址空间相互独立
,线程之间资源、地址空间可以共享
; - 单一进程奔溃后,
不会影响其他进程
;线程奔溃后,进程也会随之奔溃
,进程比线程更加健壮; -
进程切换时,消耗的资源大,效率高;但涉及共享资源的并发操作只能使用线程
; - 执行过程:每个独立的进程有一个
程序运行的入口、顺序执行序列和程序入口
。但是 线程不能独立执行,必须依存在应用程序中
,由应用程序提供多个线程执行控制。
2、多线程真相
-
单核cpu
同一时间CPU只能处理1个线程的任务,需要CPU在各个线程中快速切换,造成了多线程执行的假象。而切换的时间单位就是时间片
。CPU进行线程切换时需要耗费cpu资源的,所以线程过多的情况下会造成性能的下降。 -
多核cpu
情况下才是真正的多线程执行;
3、iOS中多线程方案

4、线程的生命周期

5、线程池

6、线程和RunLoop的关系
-
runloop与线程是一一对应
的,一个runloop对应一个核心的线程,为什么说是核心的,是因为runloop是可以嵌套的,但是核心的只能有一个,他们的关系保存在一个全局的字典里; -
runloop是来管理线程
的,当线程的runloop被开启后,线程会在执行完任务后进入休眠状态,有了任务就会被唤醒去执行任务; -
runloop在第一次获取时被创建,在线程结束时被销毁
;对于主线程来说,runloop在程序一启动就默认创建好了; - 对于子线程来说,runloop是懒加载的,需要在使用前进行创建;
7、队列和线程:
- 任务是在线程中进行执行;
- 队列进行线程中任务的排序和分发,非执行任务处于挂起状态;
- 队列分为: 串行队列-同步;并发队列-异步
- 队列是一种数据结构。在相同复杂度任务- 遵循fifo先进先出的原则;
7.1 串行队列

7.2 并发队列
