iOS-多线程(一)基本概念

  • 进程
  • 线程
  • 线程状态与生命周期
  • iOS中多线程的实现方案

进程

  • 理解为一个正在运行的应用程序,是系统进行资源分配和调度的基本单位,是操作系统结构的基础;
  • 每个进程都是独立的,它们运行在其专用且受保护的内存空间内;
  • 进程是一个实体;

线程

  • 线程是进程的基本执行单元,负责代码的执行,线程很轻所以线程切换非常快并且开销小;
  • 进程的所有任务都在线程中执行;
  • 一个进程中只有一个主线程,在程序启动后自动创建,一个进程对应1-n个线程;
  • 线程串行:在同一时间内,一个线程只能执行一个任务,多个任务只能一个接着一个按顺序执行;
  • 一个进程中的多个线程都可以共享改进程中所有的资源;
  • 线程不是一个可执行的实体;
主线程
  • 程序运行后,默认会开启1条线程,称为“主线程”或“UI线程”;
  • 主要作用:1.显示、刷新UI页面;2.处理UI事件;凡是和UI相关的操作应放在主线程中操作;
  • 不要将耗时的操作放到主线程中,耗时操作应放在子线程;
单线程
  • 进程中仅包含一个主线程的程序,成为单线程程序;
  • 所有代码只能按照顺序执行,无法并发执行;
多线程
  • 进程中可以根据需要开辟若干子线程,各自的执行互不影响,因此能够并发执行;
  • 单核的情况下,CPU同一时间只能执行一个线程的任务。关于多线程并发,是因为CPU快速的在多个线程之间调度,当调度的速度很快的时候,就会出现貌似并发的假象;
  • CPU在线程中调度,会消耗CPU的资源;
多线程优缺点:
  • 优点:适当的提高程序的执行效率以及资源利用率(CPU、内存利用率);
  • 缺点:
    (1)创建线程是有一定的开销,内核数据结构(大约1kb)、栈空间(子线程512kb,主线程1MB);
    (2)创建线程大约90毫秒的时间;
    (3)如果创建大量的线程,会占用大量的内存空间,会影响性能;(4)线程越多,CPU调度线程的开销就越大;
    (5)涉及到更多的线程之间的通讯以及线程安全的问题;

总结一句:空间换时间。

线程状态与生命周期

线程状态图:


线程状态图.png

通过上面的图,可以看出线程总共有五个状态:

  • 新建:实例化线程对象;
  • 就绪:线程对象执行start方法,会加入可调度线程池等待CPU调度;
  • 运行:CPU调度到当前线程,执行当前线程中的任务。在线程的任务执行完成前,线程状态可能会在就绪和运行之间来回切换。状态的切换是有CPU负责的;
  • 阻塞:通过睡眠或者锁,阻塞线程的执行;
  • 死亡:线程执行完毕为正常死亡,在线程内部中止执行/在主线程中止线程对象为非正常死亡;

iOS中多线程的实现方案

iOS多线程的四种解决方案分别是:pthread,NSThread,GCD, NSOperation。


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

将在后面的文章中,各自介绍。

你可能感兴趣的:(iOS-多线程(一)基本概念)