iOS底层基础知识iOS面试知识点

多线程一

2019-05-09  本文已影响46人  Code_人生

一、线程的定义

  1. 线程是进程的基本执行单元,一个进程的所有任务都在线程中执行
  2. 进程要想执行任务,必须得有线程,进程至少要有一条线程
  3. 程序启动会默认开启一条线程,这条线程被称为主线程或 UI 线程

二、进程的定义

  1. 进程是指在系统中正在运行的一个应用程序
  2. 每个进程之间是独立的,每个进程均运行在其专用的且受保护的内存

三、线程和进程的关系和区别

  1. 地址空间:同一进程的线程共享本进程的地址空间,而进程之间则是独立的地址空间。
  2. 资源拥有:同一进程内的线程共享本进程的资源如内存、I/O、cpu等,但是进程之间的资源是独立的
  3. 一个进程崩溃后,在保护模式下不会对其他进程产生影响,但是一个线程崩溃整个进程都死掉。所以多进程要比多线程健壮
  4. 进程切换时,消耗的资源大,效率高。所以涉及到频繁的切换时,使用线程要好于进程。同样如果要求同时进行并且又要共享某些变量的并发操作,只能用线程不能用进程
  5. 执行过程:每个独立的进程有一个程序运行的入口、顺序执行序列和程序入口。但是线程不能独立执行,必须依存在应用程序中,由应用程序提供多个线程执行控制
  6. 线程是处理器调度的基本单位,但是进程不是

四、多线程的意义

1. 优点

  1. 能适当提高程序的执行效率
  2. 能适当提高资源的利用率(CPU,内存)
  3. 线程上的任务执行完成后,线程会自动销毁

2. 缺点

  1. 开启线程需要占用一定的内存空间(默认情况下,每一个线程都占 512 KB)
  2. 如果开启大量的线程,会占用大量的内存空间,降低程序的性能
  3. 线程越多,CPU 在调用线程上的开销就越大
  4. 程序设计更加复杂,比如线程间的通信、多线程的数据共享

五、多线程的原理

cpu在单位时间片里快速在各个线程之间切换

六、线程生命周期

线程生命周期.png
线程生命周期1.png

七、线程池的原理

线程池的原理.png

八、线程安全

  1. 性能

九、线程通讯

十、线程和runloop的关系

1:runloop与线程是一一对应的,一个runloop对应一个核心的线程,为什么说是核心的,是因为runloop是可以嵌套的,但是核心的只能有一个,他们的关系保存在一个全局的字典里。
2:runloop是来管理线程的,当线程的runloop被开启后,线程会在执行完任务后进入休眠状态,有了任务就会被唤醒去执行任务。
3:runloop在第一次获取时被创建,在线程结束时被销毁。
4:对于主线程来说,runloop在程序一启动就默认创建好了。
5:对于子线程来说,runloop是懒加载的,只有当我们使用的时候才会创建,所以在子线程用定时器要注意:确保子线程的runloop被创建,不然定时器不会回调。

上一篇 下一篇

猜你喜欢

热点阅读