多线程

194 阅读2分钟

进程和线程

什么是进程

  • 进程指系统中正在运行的应用程序
  • 每个进程之间是相互独立的,每个进程均运行在其专用且受保护的内存空间

比如同时打开QQ、网易云音乐、Xcode,系统就会分别启动3个线程

什么是线程

  • 1个进程想要执行任务,就必须得有线程(每个进程至少要有1条线程)
  • 线程是进程的基本执行单元,一个进程的所有任务都在线程中执行

比如QQ聊天、网易云音乐播放音乐、迅雷下载电影,都需要在线程中执行

线程的串行

  • 1个线程中任务的执行是串行的
  • 在一个线程中执行多个任务,那么只能按顺序一个个执行
  • 同一时间内1个线程只能执行一个任务

多线程

什么是多线程

  • 1个进程中可以开启多条线程,每条线程可以同时(并行)执行不同的任务
  • 进程 -> 车间 线程 ->车间工人
  • 多线程可以适当提高程序执行效率

比如开启多条线程同时执行不同任务

多线程原理

  • 同一时间,CPU只能处理1条线程,只有1条线程在执行任务
  • 多线程并发执行,其实是CPU快速在多条线程之间调度(切换)
  • 如果CPU调度的时间足够快,就造成了多线程并发执行的假象

如果线程非常多,会发生什么情况?

  • CPU在N多线程之间调度,CPU会累死,消耗大量的CPU资源
  • 每条线程被调度的频率降低(线程执行效率降低)

多线程优点

  • 适当提高程序执行效率
  • 适当提高资源利用率 (CPU、内存利用率)

多线程缺点

  • 开启线程需要一定的内存空间(默认情况下,主线程占用1M,子线程512kb),如果过开启大量线程,会占用大量的内存空间,降低程序性能
  • 线程越多,CPU调度线程上开销越大
  • 程序设计更复杂,比如线程之间通信,多线程数据共享

多线程在iOS开发中应用

  • 主线程:一个iOS程序运行后,会默认开启一条线程,称为主线程或者UI线程
  • 主线程主要作用:显示刷新界面、处理UI事件(点击、滚动、拖拽事件)

使用主线程需要注意:不要将耗时的操作放在主线程,耗时操作会卡住主线程,严重影响UI的流畅度,给用户卡的体验