进程:

  • 进程是指在系统中正在运行的一个应用程序,比如同时打开微信和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多了一些更简单实用的功能,使用更加面向对象,线程生命周期自动管理

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

转载于:https://www.cnblogs.com/hs-funky/p/6512515.html

iOS开发 - 线程与进程的认识与理解相关推荐

  1. iOS开发中自旋和互斥锁的理解以及所有锁的性能比较

    补充: 可以看到除了 OSSpinLock 外,dispatch_semaphore 和 pthread_mutex 性能是最高的.苹果在新系统中已经优化了 pthread_mutex 的性能,所以它 ...

  2. iOS开发线程同步技术-锁

    概览 1,什么是锁(临界区)? 2,常用的锁有哪些? 3,相关链接 什么是锁(临界区) 临界区:指的是一块对公共资源进行访问的代码,并非一种机制或是算法. 常用的锁有哪些? 互斥锁:是一种用于多线程编 ...

  3. iOS 开发线程 gcd

    基础知识: 下午9:09 一.基础概念 1.什么是GCD 全称是Grand Central Dispath 纯C语言编写,提供非常多且强大的函数,是目前推荐的多线程开发方法,NSOperation便是 ...

  4. iOS开发--线程通信

    线程间的通信主要用于主线程与子线程的,也有用于子线程与子线程的 介绍下面几种通信方式 1.利用GCD方式(推荐) - (void)touchesBegan:(NSSet<UITouch *> ...

  5. (0077)iOS开发之直播播放器技术名词理解以及开发准备(待实现直播demo)

    本文主要是为了理解最近比较火的直播软件.播放器软件的实现原理的调研.为以后研究相关开发做准备.调研整理: 关键词:iOS直播 类似斗鱼,虎牙等直播平台都运用了哪方面前后端技术? https://www ...

  6. ios开发中计算代码运算时间_理解Unity中的优化(二):内存

    内存: 内存消耗是一个关键的性能指标,尤其是在内存资源有限的平台上,比如低端移动设备. 内存消耗分析: 在Unity中诊断内存问题,Unity介绍了一款开元的可视化内存分析工具--MemoryProf ...

  7. IOS开发中委托代理(degegate)的理解和使用示例

    委托代理(degegate),顾名思义,把某个对象要做的事情委托给别的对象去做.那么别的对象就是这个对象的代理,代替它来打理要做的事. 反映到程序中,首先要明确一个对象的委托方是哪个对象,委托所做的内 ...

  8. android 线程信号量,iOS开发 多线程的高级应用-信号量semaphore

    在iOS开发的道路上,多线程的重要性不言而喻. 大部分我们都停留在基础的使用上面.缺乏高级应用. 缺乏提升,是因为我们面对他太少,复杂的事情重复做,复杂的事务基础化. 差距就是这样拉开了 言归正传: ...

  9. iOS开发里的线程安全机制

    [编者按]本文为再读苹果<Threading Programming Guide>笔记第四篇,主要分享了线程安全机制以及设计时所需要注意的事项.从最初的"什么是线程"到 ...

最新文章

  1. ubuntu:通过封装验证码类库一步步安装php的gd扩展
  2. mybatis里的日志动态代理
  3. [KMP]一本通(http://ybt.ssoier.cn:8088) 1698:字符串匹配
  4. 从单租户IaaS到多租户PaaS——金融级别大数据平台MaxCompute的多租户隔离实践
  5. c++数据结构中 顺序队列的队首队尾_用队列实现栈,用栈实现队列,听起来有点绕,都搞懂了就掌握了精髓
  6. 程序员如何搞定前端高频面试难题?附答案汇总 | 技术头条
  7. 07.用户控件弹窗提示后页面显示不正常;
  8. latex怎么打区间_涨出天际的安阳房价,这个月怎么样了?
  9. 把矩阵变为0,1矩阵
  10. Python 监控linux之dstat
  11. 考研倒计时软件 终结版
  12. RemoveWGA升级了
  13. 2021年N1叉车司机考试及N1叉车司机考试试卷
  14. 2018高中计算机会考时间,2018年高中会考什么时候考哪些科目
  15. A Retinex based GAN Pipeline to Utilize Paired and Unpaired Datasets for Enhancing Low Light Images
  16. Windows:nginx: [error] CreateFile() “/logs/nginx.pid“ failed (2: The system)
  17. 上海之旅,再让键盘长几天草
  18. 单片机STM32直连电调控制航模涵道电机的方法总结
  19. Android QPython3 制作简易GUI长文本框界面
  20. 成信大807程序综合设计2015-2022历年真题及答案【持续更新中】

热门文章

  1. python 修改计算机名_静心学数据分析002-python基础
  2. java中什么是空指针异常_java中空指针异常的问题,是怎么回事?请看代码
  3. 【C++】多线程(链式、循环队列)实现生产者消费者模式
  4. php模拟超级课程表,一个功能完善、UI简洁的仿超级课程表的课表控件 TimetableView...
  5. Paper4:Voxel-Based Extraction and Classification of 3-D Pole-Like Object From Mobile LIDAR Point Clo
  6. BGR图像与HSV图像互相转换(opencv)
  7. AI视频行为分析系统项目复盘——技术篇4:deepsort原理图
  8. 【深度学习】(7) 交叉验证、正则化,自定义网络案例:图片分类,附python完整代码
  9. 【ios开发/Xcode】实现简易省会问答
  10. phalcon php 5.4,如何在php上安装phalcon