iOS ------ 多线程基础

news2024/11/14 2:10:25

一,进程和线程

1,进程

定义:

  • 进程是指在系统中正在运行的一个应用程序
  • 每个进程之间是独立的,每个进程均运行在其专有的且受保护的内存
  • 进程是系统进行资源分配和调度的一个独立单位

补充:iOS系统是相对封闭的系统,App在各自的沙盒中运行,每个APP都只能读取系统为该应用程序创建的文件夹AppData下的内容,不能随意跨域自己的沙盒去访问别的App沙盒中的内容。也就是说iOS是单线程的,一个App就是一个进程。

特点:

  • 独立性:是系统独立存在的实体,拥有自己独立的资源,有自己私有的地址空间。在没有经过进程本身的允许的情况下,一个用户的进程不可以直接访问其他进程的地址空间。
  • 动态性:程序是一个静态的指令集合,而进程是一个正在系统中活动的指令集合,进程中加入了时间的概念。进程具有自己的生命周期和不同的状态,这些都是程序不具备的
  • 并发性:多线程可以在单个处理器上并发执行,多个进程之间不会相互影响

2,线程

定义:

  • 线程是进程的基本执行单位,一个进程的所有任务都在线程中执行
  • 进程要想执行任务,至少要有一个线程
  • 程序启动会默认开启一条线程,这条线程被称为主线程和UI线程

3,进程和线程的关系

  • 地址空间:同一进程的线程共享本进程的地址空间,而进程之间则是独立的地址空间。
  • 资源拥有:同一进程内的线程共享本进程的资源如内存,I/O,CPU等,但是进程之间的资源是独立的。
  • 进程切换时,消耗的资源大,效率高。所以涉及到频繁的切换时,使用线程要好于进程。同样如果要求同时进行并且又要共享某些变量的并发操作,只能用线程不能用进程
  • 执行过程:每个独立的进程有一个程序运行的入口、顺序执行序列和程序入口。但是线程不能独立执行,必须依存在应用程序中,由程序提供多个线程执行控制。
  • 线程是处理器调度的基本单位,但是进程不是

4,任务

  • 通俗的说任务就是一件事情或一段代码,线程其实就是去执行这个时期

5,队列

  • 队列是先进先出的线性表。装载线程任务的队形结构。队列只允许新数据在后端进行添加。
    在这里插入图片描述

队列的类型

  • 并发队列:线程执行可以同时一起执行,不需要上一个执行完,才能执行下一个的
  • 串行队列:线程执行只能依次逐一先后有序的执行,等待上一个执行完,再执行下一个
  • 主队列:绑定主线程,所有任务都在主线程执行,有经过特殊处理的串行队列
  • 全局队列:系统提供的并发队列

6,同步和异步

  • 同步sync:只能在当前线程按先后顺序依次执行任务,不具备开启新线程的能力
  • 异步async:在新的线程执行任务,具备开启新线程的能力
    在这里插入图片描述

二,多进程和多线程

  • 在早期单核CPU

如何理解多进程?在早期单核CPU时代,由于CPU执行代码都是顺序执行的,那么单核CPU如何执行多任务?
比如说一边用浏览器上网,一边听音乐,一边写代码

这里用到时间片轮换调度:简单就是把一个处理器划分为若干个段的时间片,每个进程会被操作系统分配一个时间片(即每次被CPU选中来执行当前进程所用的时间),每个时间片依次轮流地执行处理各个应用程序,时间一到,无论进程是否运行结束,操作系统就会强制将CPU这个资源转到另一个进程去执行,由于每个时间片很短,对于每个程序,就好像为自己单独服务,从而达到多个程序同时进行的效果。

如何理解多线程?
在一个程序中,以QQ聊天为例,当QQ这个进程被CPU分配时间处理时,这时我们需要处理聊天还是处理界面的刷新。如果处理了聊天,界面就不会刷新,看起来界面就卡死了。同样上上面一样,每次 CPU 执行100ms,其中30ms用于处理聊天,40ms用于处理传文件,剩余的30ms用于处理界面刷新,这样快速切换处理。就可以达到多线程的效果。

  • 在当前的多核CPU

多核CPU拥有多个物理核心,每个物理核心可以同时执行一个进程(线程)或多个进程(线程)。这意味着在多核CPU下,多个进程(线程)可以正真并行执行,每个线程在各自的核心上独立运行。

在多核CPU的情况下,也可能会出现一个CPU核心处理多个进程(线程)的情况。

每个线程在自己的核心上独立执行,互不干扰,可以充分利用CPU的并行处理能力。这种并行执行可以提高系统的响应性和吞吐量。

区别:
在多核CPU下,多线程的并发编程相对复杂,需要考虑线程间的同步、互斥和数据共享等问题。由于多个线程可以同时访问和修改共享数据,可能会出现竞态条件和数据不一致的问题,需要使用同步机制(如锁、信号量等)来实现线程安全。
而在单核CPU下,由于只有一个线程在执行,不存在多个线程同时访问共享数据的问题,因此并发编程的复杂性相对较低。

三,多线程的生命周期

在这里插入图片描述

  • 新建:实例化线程对象
  • 就绪:向线程对象发送start消息,线程对象被加入可调度线程池等待CPU调度。
  • 运行:CPU负责调度可调度线程池中线程的执行,线程执行完成之前,状态可能会在就绪和运行之间来回切换。就绪和执行之间的状态变化由CPU负责。
  • 阻塞:当满足某个预定条件时,可以使用休眠或锁,阻塞线程执行,所谓阻塞状态是正在运行的线程没有运行结束,暂时让出CPU,这时其他处于就绪状态的线程就可以获得CPU时间,进入运行状态。
  • 死亡:正常死亡,线程执行完毕。非正常死亡,当满足某个条件后,在线程内部终止执行/在主线程终止线程对象

线程池
线程池是一种“池化”的线程使用模式。线程的创建,销毁,调度都有一定的开销,通过预先创建一定数量的线程,让这些线程处于就绪状态来提高系统响应速度,在线程使用完成后归还到线程池达到重复利用的目的,从而降低系统资源的消耗,提高响应速度,增加了线程的可管理性。

四,多线程的四种使用方法

在这里插入图片描述

我们一般使用比较多的是 GCD,因为开发者只需要告诉 GCD 想要执行什么任务,不需要编写任何线程管理代码,但这也是 GCD 的不够灵活的地方,我们无法监控线程的各个状态,这也是很多大框架中使用 NSOperation 的原因,NSOperation 相比 GCD 更加灵活,开发者可以通过 KVO 监测 Operation 的状态,自定义 NSOperation 等。

五,多线程的意义

  • 某个操作可能会陷入长时间等待,等待的线程会进入睡眠状态,无法继续执行。多线程执行可以有效利用等待时间进行线程切换。如等待网络响应。
  • 某个操作可能会消耗大量的时间,如果只有一个线程,程序和用户之间的交互会被中断。多线程可以让一个线程负责交互,另一个线程负责计算。
  • 多CPU或多核处理器,本身具备同时执行多个线程的能力,因此单线程程序无法全面发挥计算机的全部计算能力。
  • 多线程可以提高程序的效率。多线程同步完成多项任务,不是为了提高运行效率,而是为了提高资源使用效率来提高系统的效率。

多线程的不足:

  • 开启线程需要占用一定的内存空间(默认情况下,每条线程占512kb);如果开启大量的线程,会占用大量的内存空间,降低程序的性能。
  • 线程越多,CPU在调用线程上的开销就越大(因为要在线程之间切换);
  • 多线程编程的程序设计会更加复杂(如线程间的通信、多线程的数据共享等)。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1679566.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

cdn引入vue的项目嵌入vue组件——http-vue-loader 的使用——技能提升

最近在写MVC的后台,看到全是jq的写法,但是对于用惯了vue的我,真是让我无从下手。。。 vue的双向绑定真的很好用。。。 为了能够在cdn引入的项目中嵌入vue组件,则可以使用http-vue-loader了 步骤1:下载http-vue-loader…

电子邮箱是什么?付费电子邮箱和免费电子邮箱有什么区别?

注册电子邮箱前,有付费电子邮箱和免费电子邮箱两类选择。付费的电子邮箱和免费的电子邮箱有什么区别呢?区别主要在于存储空间、功能丰富度和售后服务等方面,本文将为您详细介绍。 一、电子邮箱是什么? 电子邮箱就是线上的邮局&a…

详解绝对路径和相对路径的区别

绝对路径和相对路径是用于描述文件或目录在文件系统中位置的两种不同方式。 绝对路径(Absolute Path)是从文件系统的根目录开始的完整路径,可以唯一地确定一个文件或目录的位置。在不同的操作系统中,根目录的表示方式可能略有不同…

SQL注入漏洞常用绕过方法

SQL注入漏洞 漏洞描述 Web 程序代码中对于用户提交的参数未做过滤就直接放到 SQL 语句中执行,导致参数中的特殊字符打破了原有的SQL 语句逻辑,黑客可以利用该漏洞执行任意 SQL 语句,如查询数据、下载数据、写入webshell 、执行系统命令以及…

ADS FEM 仿真设置

1、EM Simulator 选择FEM。 2、在layout界面打开的EM功能,这里不需要操作。 3、Partitioning 不需要操作。 4、没有叠层的话需要新建,过孔可以在叠层处右键添加。 5、端口需要设置GND layer。 6、设置仿真频率。 7、Output plan。 8、Options 设置 介质…

【企业宣传片】拍摄思维提升,专业影视质感核心揭密,一课搞定

课程下载:【企业宣传片】拍摄-课程网盘链接提取码下载.txt资源-CSDN文库 更多资源下载:关注我。 课程介绍 大量案例分析宣传片拍摄的痛点要点 根据案例告诉你解决方案,讲透概念 改变你对企业宣传片的思维层级与认知 归纳总结对比不同案…

【C -> Cpp】由C迈向Cpp (6):静态、友元和内部类

标题:【C -> Cpp】由C迈向Cpp (6):静态、友元和内部类 水墨不写bug (图片来源于网络) 目录 (一)静态成员 (二)友元 (三&#xff09…

GDPU 竞赛技能实践 天码行空 期末小测

1. 除法(原题) 👨‍🏫 实验二:1.简单枚举 输入正整数n,按从小到大的顺序输出所有形如abcde/fghij n的表达式,其中a~j恰好为数字0~9的一个排列(可以有前导0&a…

【三家飞机制造商】

1.Boeing 波音 F-15战机 B-52轰炸机 阿帕奇攻击直升机 E-3 2 .Lockheed Martin 洛克希德马丁 F35 F22 F16 F117 C130 U2 3 Raytheon 雷神

基于微信小程序+JAVA Springboot 实现的【智慧乡村旅游服务平台】app+后台管理系统 (内附设计LW + PPT+ 源码+ 演示视频 下载)

项目名称 项目名称: 基于微信小程序的智慧乡村旅游服务平台的设计与实现 项目技术栈 该项目采用了以下核心技术栈: 后端框架/库: Java SSM框架数据库: MySQL前端技术: 微信开发者工具、uni-app其他技术&#xff1a…

迷宫游戏(c++)

我们来玩一个迷宫游戏,尝试走一下面的迷宫。 迷宫游戏 我们用一个二维的字符数组来表示前面画出的迷宫: S**. .... ***T 其中字符S表示起点,字符T表示终点,字符*表示墙壁,字符.表示平地。你需要从S出发走到T&#xf…

RALL-E: Robust Codec Language Modeling with Chain-of-Thought Prompting for TTS

demo pageDetai Xin, tanxu微软 & 东大 & 浙大 abstract 使用CoT的思路,和Valle的框架,先实现LLM预测音素级别pitch/duration,然后预测speech token。 methods Prosody tokens as chain-of-thought prompts 和Valle一…

面试前端随笔20240510

最近公司招聘前端开发人员有幸参与帮听,总结了三个有关vue的面试问题和答案,现在分享一下。 1.Vue2数据监听无法监听数组为啥?有啥解决方案?vue3中是如何处理这个问题? vue2的官方说明了defineProperty的一些限制&…

脉冲水路清洗机,全自动脉冲技术清除管道堵塞

邦注脉冲水路清洗机是一种高效的清洗设备,它利用全自动脉冲技术来清除管道内的堵塞和污垢。以下是对该设备的一些详细描述: 全自动脉冲技术:脉冲水路清洗机采用了全自动脉冲技术,这是一种先进的清洗方法。该技术通过产生高强度的…

3D Web轻量化引擎HOOPS Communicator如何处理DWG文件中的图纸?

在当今工程设计和建筑领域,数字化技术已经成为不可或缺的一部分。HOOPS Communicator作为一种强大的三维数据可视化工具,被广泛应用于处理各种CAD文件,其中包括AutoCAD的DWG格式。在这篇文章中,我们将探讨HOOPS Communicator是如何…

湖南大学OS-2018期末考试(不含解析)

前言 不知道哪里翻出来的一张,看着确实像期末考卷,暂且放一下。或许做过,或许没做过。 总之答案不记得了。做完可以评论区发一下或者找我发出来。 共6道大题。 一、(30%) 1. (6%) 进程间通信的两种方法分别是什么&…

GIN框架_请求参数

请求参数 1. Get请求参数 使用Get请求传参时,类似于这样 http://localhost:8080/user/save?id11&namezhangsan。 如何获取呢? 1.1 普通参数 request url: http://localhost:8080/user/save?id11&namezhangsan r.GET("/user/save&qu…

【Web】CTFSHOW 月饼杯 题解(全)

目录 web1_此夜圆 web2_故人心 web3_莫负婵娟 web1_此夜圆 拿到源码&#xff0c;一眼字符串逃逸 本地测一测&#xff0c;成功弹出计算器 <?phpclass a {public $uname;public $password;public function __wakeup(){system(calc);} }function filter($string){retur…

网络安全大神是怎么炼成的

首先&#xff0c;兴趣是最好的老师&#xff0c;如果你不感兴趣&#xff0c;建议换一个有兴趣的专业&#xff0c;其次&#xff0c;再来说说你是对信息安全感兴趣&#xff0c;想往安全方面走的&#xff0c;我这边给你一些学习建议。 首先&#xff0c;安全这方面的前景是很好的&a…

代理IP与网络隐私

随着科技的发展&#xff0c;越来越多的人开始享受网络的便利&#xff0c;人们逐步在社交媒体上分享自己的生活。这些公开信息是可以被所有人浏览观看的&#xff0c;但是也会存在部分隐私信息我们并不想要被人知晓&#xff0c;这就牵扯到网络隐私保护问题。 代理IP对于网络隐私保…