进程与线程相关的介绍

进程:程序员

  • 进程是指在系统中正在运行的一个应用程序,好比同时打开微信和QQ,系统会分别启动两个进程
  • 每一个进程之间是独立的,每一个进程均运行在其专用且受保护的内存空间中

 

线程:微信

  • 一个进程要想执行任务,必须得有线程(每一个进程至少要有一条线程),是进程中执行运算的最小单位,是进程中的一个实体,是被系统独立调度和分派的基本单位
  • 一个进程(程序)的全部任务都在线程中执行
  • 一个程序有且只有一个主线程,程序启动时建立(调用main来启动),主线程的生命周期和应用程序绑定,程序退出时,主线程也中止
  • 同一时间内,一个线程只能执行一个任务,若要在一个进程中执行多个任务,那么只能一个一个按顺序执行这些任务(线程的串行)
  • 线程本身不拥有系统资源,只拥有在运行中必不可少的资源,但它可与同属一个进程的其余线程共享进程所拥有的所有资源

 

线程的几种状态:数据结构

  • 新建状态:新建立一个线程对象
  • 就绪状态:线程对象建立以后,其余线程调用了该对象的start方法,该状态的线程位于可运行线程池中,变得可运行,等到获取CPU的使用权
  • 运行状态:就绪状态的线程获取了CPU,执行程序代码
  • 阻塞状态:因某种缘由放弃CPU使用权,暂时运行,直到线程进入就绪状态,才有机会成为运行状态
  • 死亡状态:线程执行完了或者因异常退出了run方法,线程生命周期结束

 

进行和线程比较:多线程

  • 线程是CPU调度(执行任务)的最小单位,是程序执行的最小单元
  • 进程是CPU分配资源和调度的单位
  • 一个程序能够对应多个进程,一个进程能够有多个线程,但至少要有一个线程,而一个线程只能属于一个进程
  • 同一个进程内的线程共享进程的全部资源

 

多线程:并发

  • 概念:一个进程中能够开启多条线程,每一条线程能够并行(同时)执行不一样的任务
  • 原理:同一时间,CPU只能处理一条线程,只有一条线程在工做,多线程并发(同时)执行,实际上是CPU快速的在多条线程之间调度(切换),若是CPU调度线程的时间足够快,就造就了多线程并发执行的假象
  • 注意:若是线程不少,CPU会在N多线程之间调度,会消耗大量CPU资源,每条线程被调度执行的频次会下降(线程的执行效率会下降)

 

多线程的优缺点:性能

  • 优势:能适当的提升程序的执行效率以及资源利用率(CPU、内存利用率)
  • 缺点:建立线程是有开销的,iOS下主要成本包括:内核数据结构(大约1kb)、栈空间(子线程512kb,主线程1MB)、建立线程大约须要90毫秒的建立时间,若是开启大量的线程,会下降程序的性能(通常最多3到5条);线程越多,CPU在调度线程上的开销就越大;程序设计更加复杂(好比线程之间的通讯、多线程的数据共享)

 

主线程:线程

  • 一个iOS程序运行后,默认会开启1条线程,称为“主线程”或者“UI线程”
  • 做用:显示/刷新UI界面,处理UI事件(点击事件、滚动事件、拖拽事件等)
  • 使用注意:不要将耗时的操做放在主线程中,耗时操做应放在子线程(后台线程,非主线程);凡是和UI相关的操做应放在主线程中操做

 

iOS中多线程的实现方案:设计

  • pthread:一套通用的多线程API,适用于Unix、Linux、Windows等系统,跨平台、可移植,使用难度大,C语言编写,线程的生命周期须要由程序员管理
  • NSTread:OC语言编写,面向对象,简单易用,可直接操做线程对象,线程的生命周期依然由程序员管理
  • GCD:替代NSTread的线程技术,用C语言编写,充分利用设备的多核,线程生命周期自动管理
  • NSOperation:对GCD进行的一次封装,比GCD多了一些更简单使用的API,在使用上更加面向对象,线程生命周期也是自动管理的
相关文章
相关标签/搜索