iOS开发 - 线程与进程的认识与理解

进程:

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

线程:

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

线程的几种状态:

  • 新建状态:新创建一个线程对象;
  • 就绪状态:线程对象创建之后,其他线程调用了该对象的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多了一些更简单实用的功能,使用更加面向对象,线程生命周期自动管理

后面的文章将着重介绍多线程的实现方案,本文旨在整理收集关于多线程的知识,加深对多线程的理解与认识,如有理解不当之处,欢迎交流与指正!

时间: 2024-08-06 20:08:51

iOS开发 - 线程与进程的认识与理解的相关文章

iOS开发中GCD在多线程方面的理解

GCD为Grand Central Dispatch的缩写. Grand Central Dispatch (GCD)是Apple开发的一个多核编程的较新的解决方法.在Mac OS X 10.6雪豹中首次推出,并在最近引入到了iOS4.0. GCD是一个替代诸如NSThread等技术的很高效和强大的技术.GCD完全可以处理诸如数据锁定和资源泄漏等复杂的异步编程问题. GCD可以完成很多事情,但是这里仅关注在iOS应用中实现多线程所需的一些基础知识. 在开始之前,需要理解是要提供给GCD队列的是代

iOS开发-线程安全-09-多线程

1 返回主页 2 GarveyCalvin 3 4 程序人生-改变未来 5 6 博客园 7 首页 8 新随笔 9 联系 10 订阅 11 管理 12 随笔- 29 文章- 29 评论- 43 13 iOS开发-多线程开发之线程安全篇 14 15 前言:一块资源可能会被多个线程共享,也就是多个线程可能会访问同一块资源,比如多个线程访问同一个对象.同一个变量.同一个文件和同一个方法等.因此当多个线程访问同一块资源时,很容易会发生数据错误及数据不安全等问题.因此要避免这些问题,我们需要使用“线程锁”来

iOS开发线程和RunLoop

一般来讲,一个线程一次只能执行一个任务,执行完毕后线程就会退出,如果我们需要一个机制让线程能随时处理时间但并不退出,通常的代码逻辑是这样: 这就是 Event Loop框架. runloop实际上就是一个管理其需要处理的事件和消息的对象,并提供了一个入口函数来执行上面Event loop的逻辑.线程执行了这个函数之后,就会一直处于这个函数内部"接受消息->等待->处理"的循环中,知道这个循环结束(例如传入quite消息),函数返回. 在OSX和iOS系统中,提供了两个这样的

Python全栈开发——线程与进程(进程)

三 multiprocessing模块 Multiprocessing is a package that supports spawning processes using an API similar to the threading module. The multiprocessing package offers both local and remote concurrency,effectively side-stepping the Global Interpreter Lock

线程与进程(我的理解)

最近面试有人问到线程与进程的区别,我就说进程是系统资源分配的最小单位,线程是CPU调度的最小单位.但是人家有细问了一下,我就没回答出来, 后来我查查书,没有查到我满意的解释.感觉应该是这样的(以后有新的理解会补充进来,如果有错也会改正O(∩_∩)O~) 最开始没有线程,只有进程,比如写个程序,程序运行起来以后,进程就是程序运行的实例,pid就是进程的标识. 后来有了多处理器啥的,一些程序为了用上这多个CPU,让这些程序共享系统资源等,但每个程序又有自己的一些属性,这些程序就称之为线程.如果这些程

iOS开发——响应链(Responder Chain)的深入理解和代码示例

我在之前一篇博客<iOS响应者链Responder Chain浅析>中对iOS开发中遇到的响应者链概念有了基本的了解.但是仅仅停留在理解概念的基础上还是远远不够的.该博客我们会通过代码案例来深入理解响应链.该博客的示例上传至 https://github.com/chenyufeng1991/ResponderChain  . (1)首先来说说第一响应者(First Responder).响应事件的传递过程就是为了找到第一响应者.以下几个方法: isFirstResponder:判断该View

【iOS开发系列】用简单工厂模式理解OC反射机制

// 在iOS开发中,简单工厂模式使用得并不多.但是.我认为这是OC反射机制很好的一个例子, // 所以本文将以计算器为例,讲解简单工厂模式和OC的反射机制. // [简单工厂模式的实质是由一个工厂类根据传入的参数,动态决定应该创建哪一个产品类( // 这些产品类继承自一个父类或接口)的实例.该模式中包含的角色及其职责:工厂角色.抽 // 象产品角色.具体产品角色] // --百度百科 简单工厂模式 // 上面这句话可能不怎么好理解,我在网上找到了一个例子,可能例子本身不能完全解释这个 // 设

线程、进程、携程理解

并发与并行 并发 拥有处理多个任务的能力.对于单核CPU来说,只能处理并发 并行 拥有同时处理多个任务的能力,对于多核CPU,即可以并发和并行 同步与异步 同步和异步强调的是消息通信机制 同步 如果一个人这样处理:先烧水,烧水的过程中啥也不干,就一直等着,等水开后,再把茶叶放到开水壶中.这种处理方法就是同步处理 也就是说,一个任务需要多步执行,如果上一步没有执行结束,那么下一步任务就一直等待.等到上一步任务完成后(一般会有结果),下一步的任务才继续执行 在计算机中:如果一段代码A的执行中需要调用

iOS 开发线程 gcd

基础知识: 下午9:09 一.基础概念 1.什么是GCD 全称是Grand Central Dispath 纯C语言编写,提供非常多且强大的函数,是目前推荐的多线程开发方法,NSOperation便是基于GCD的封装 2.GCD的优势 1.为多核的并行运算提出了解决方案 2.GCD会自动利用更多的CPU内核,比如 双核,四核 3.GCD自动管理线程的生命周期(创建线程,调度任务,销毁线程) 4.程序员只需告诉GCD想要执行什么任务,不需要编写任何线程管理代码 3.GCD中的两个核心概念 1.任务