进程和线程

Mar 2, 2015


进程

运行一个程序,操作系统会给这个程序分配内存、cpu等各种资源,从而进行各种程序运行活动;这个程序运行的活动过程就被抽象出来,称为一个进程。例如:我们启动Xcode,那么将会在活动监视器中看到一个Xcode进程。

线程

一个进程启动后,想要进行各种运行活动(cpu进行运算、逻辑处理等),就必须启动一个线程。也就是说线程是进程的基本执行单元。所以进程内部包含一条或者线程,其中一条称之为主线程,其他线程为子线程。

进程和线程的区别

  • 进程是资源分配的基本单位,线程是调度的基本单位。
  • 进程:计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础。它的执行需要系统分配资源创建实体之后,才能进行。进程的个体间是完全独立的。多进程环境中,任何一个进程的终止,不会影响到其他进程。
  • 线程:一个进程可以有多个线程,所以线程间是彼此依存的,线程之间可以相互通信,相互创建,撤销等。多线程环境中,父线程终止,全部子线程被迫终止(没有了资源)。而任何一个子线程终止一般不会影响其他线程,除非子线程执行了exit()系统调用。任何一个子线程执行exit(),全部线程同时灭亡。
  • 线程:线程任务的执行是串行的,也就是说,同一时间,一个线程只能执行一个任务。如果一个线程要执行多个任务,只能一个一个按照顺序执行这些任务。

多线程

线程是串行的,也就是说,同一时间,同一个线程,我们只能执行一个任务。所以,为了同一时间执行多个任务,我们可以开启多条线程来达到这个目的。

多线程的原理:单核cpu同一时间只能只能处理多条线程,只能在一条线程中工作。所以同一时间执行多条线程(并发),实际上是cpu在多条线程之间调度(来回切换)。如果cpu调度线程足够快,就会造成多线程并发的假象。

多线程优缺点

优点:同时执行多个任务,提高执行效率,提高cpu利用率。

缺点:开启线程要消耗内存;线程之间调度需要消耗CPU资源;多线程通讯,程序复杂。

iOS中的多线程

主线程:一个iOS程序运行后,系统默认会开启一条线程,成为主线程或UI线程。

主线程主要作用:显示/刷新UI界面,处理UI事件(点击、滚动、拖拽事件等)。

iOS中的多线程技术:

方式 简介 语言 生命周期管理
NSThread 面向对象,可以直接操作线程对象 OC 手动管理
GCD 充分利用设备多核 C 自动管理
NSOperation 基于GCD(底层是GCD),比GCD多了些简单实用的功能,更加面向对象化 OC 自动管理