【多线程-第一天-NSThread-互斥锁和自旋锁的区别-练习-异步下载网络图片 Objective-C语言】

news2025/1/6 18:58:45

一、互斥锁和自旋锁的区别

通知

1.刚刚我们看过了,互斥锁和自旋锁,下边我们来看,互斥锁和自旋锁的一个区别,

1)互斥锁:如果发现其他线程正在执行锁定代码,线程会进入休眠(就绪状态),等其他线程时间片到了,打开锁后,线程会被唤醒(执行)

它是被唤醒的,相当于什么呢,相当于你同桌,去厕所了,你也去厕所了,一敲门儿,你同桌在里边儿呢,这时候你跟同桌说:”我先回去了,等会儿你上完之后叫我“,哎,你先回来休息了,你同桌上完之后,会把门儿打开,回来叫你一声儿,你再去,你是不是就不用在门口儿一直站着了,

2)自旋锁:如果发现有其他线程正在锁定代码,有人占着那个坑儿呢,这个时候,你要去敲这个门儿,线程会用死循环的方式,不停的敲门儿,直到锁定的代码完成以后,这儿画了一个线程A正在执行这段儿代码呢,线程B就不停的敲门儿,不停的问“锁开了没有”,死循环,不停的去等待,

2.因为自旋锁的特点,它会不停的去等待,相当于是有一个循环,循环是非常消耗性能的,所以,我们自旋锁不适合锁住太多的代码儿,

自旋锁不适合锁住比较耗时的代码儿,锁住比较耗时的代码儿的话,等的时间会,特别长,

那你在循环,一直在循环,锁开了没有、锁开了没有、很烦人是吧,

非常的消耗性能,这是自旋锁啊,它不适合去执行非常耗时的操作,

所以一般情况下,就是属性,原子属性,用了一个自旋锁,

3.而互斥锁呢,任何位置,我们想锁住一段儿代码呢,你首先要想到的就是,互斥锁,

用互斥锁来做这件事情,这是互斥锁和自旋锁的区别,

二、其他

通知

1.线程安全:线程是不安全的,只要将来你用到了多线程,首先就要有一个概念,线程是不安全的,要想办法去保证线程的安全,

我们演示过一个,多个线程操作同一个全局变量的时候,

线程安全:在多个线程进行读写操作时,仍然能够保证数据的正确,

2.主线程(UI线程)

几乎所有UIKit提供的类都是线程不安全的,多个线程同时去操作的时候,可能会出现数据不一致的情况,所以我们要想办法去保证,我们多个线程同时去操作这些UI控件的时候,也要保证它的线程安全,因为这些类是线程不安全的,所以我要保证,在多线程操作它们的时候,是不是也要保证它们的数据是正确的,也要保证这个线程的安全,那怎么保证呢,

所有更新UI的操作都放在主线程执行,

为什么呢,因为你们是线程不安全的,如果我们多个线程,同时给一个Label去赋值,是不是可能会出现冲突,那怎么办呢,我们把这个操作都放到主线程上,我一个线程,是不是就是一个人,我给这个人分配5件事儿,这5件事儿它怎么执行,慢慢儿来,执行完一件,再执行另一件,

是不是不会出现同时这种情况,

所以,我们把所有更新UI的操作,都放在主线程上执行,保证这个线程安全,

所有包含Mutable的类,都是线程不安全的,

我们学过哪些包含Mutable的类,

NSMutableString、NSMutableArray、NSMutableDictionary、

这些类都是线程不安全的,什么是线程不安全的,多个线程同时对同一个MutableArray进行赋值的时候,不安全,可能会出现问题,我说的是可能,是一定吗,不一定,

有的时候可能是没有问题的,有的时候可能是有问题的,因为线程执行的过程是不确定的,

三、这块儿来做一个练习——异步下载网络图片

1.异步下载网络图片

通知

异步从网络上下载一张图片,显示到屏幕上来,下载一张大图,这张图片超过了屏幕的大小,超过我们这个手机屏幕的大小,所以要做拖动,让这个图片可以拖动,

拖动的话,需要什么控件儿,scrollView,

下载这么一张图片,

通知

这是网络上随便找的一张图片,

通知

新建一个项目,09-异步下载网络图片,

通知

为什么要异步下载网络图片呢,同步下不行吗,

同步会有什么问题呢,下载网络图片为什么要异步,而不同步,

同步下的慢,异步下载的也不快啊,都是这些资源,都是这个电脑,都是这个网络,

同步和异步下载的时间是一样的,

异步可以同时下载,我就开一个线程,我们大图,体积可能比较大,2-3M,网速有限,下载的速度可能比较慢,如果下载速度慢,是一个耗时操作,这个时候,界面会卡死,所以要异步下载,

2.我们创建好一个程序,我们要在这儿,放置一个scrollView,

通知

但是,在这个位置放scrollView,里面还得放一个imageView,

还要做屏幕适配,

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

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

相关文章

Ubuntu环境安装RabbitMQ

1.安装Erlang RabbitMq需要Erlang语⾔的⽀持,在安装rabbitMq之前需要安装erlang # 更新软件包 sudo apt-get update # 安装 erlang sudo apt-get install erlang 查看erlang版本 : erl 退出命令:halt(). 2. 安装RabbitMQ # 更新软件包 sudo apt-get update # 安装 …

基于Huffman编码的GPS定位数据无损压缩算法

目录 一、引言 二、霍夫曼编码 三、经典Huffman编码 四、适应性Huffman编码 五、GPS定位数据压缩 提示:文末附定位数据压缩工具和源码 一、引言 车载监控系统中,车载终端需要获取GPS信号(经度、纬 度、速度、方向等)实时上传…

智慧油客:从初识、再识OceanBase,到全栈上线

今天,我们邀请了智慧油客的研发总监黄普友,为我们讲述智慧油客与 OceanBase 初识、熟悉和结缘的故事。 智慧油客自2016年诞生以来,秉持新零售的思维,成功从过去二十年间以“以销售产品为中心”的传统思维模式,转向“以…

如何查看电脑的屏幕刷新率?

1、按一下键盘的 win i 键,打开如下界面,选择【系统】: 2、选择【屏幕】-【高级显示设置】 如下位置,显示屏幕的刷新率:60Hz 如果可以更改,则选择更高的刷新率,有助于电脑使用起来界面更加流…

数据结构——有序二叉树的删除

在上一篇博客中,我们介绍了有序二叉树的构建、遍历、查找。 数据结构——有序二叉树的构建&遍历&查找-CSDN博客文章浏览阅读707次,点赞18次,收藏6次。因为数据的类型决定数据在内存中的存储形式。left right示意为左右节点其类型也为…

深入理解 SQL 注入:原理、攻击流程与防御措施

深入理解 SQL 注入:原理、攻击流程与防御措施 在当今数字化的时代,数据安全已成为每个企业和开发者必须面对的重要课题。SQL 注入(SQL Injection)作为一种常见的网络攻击方式,给无数企业带来了巨大的损失。本文将深入…

android WebRtc 无法推流以及拉流有视频无声音问题

最近在开发使用WebRtc进行视频通话和语音通话,我使用的设备是MTK的手机,期间后台的技术人员几乎没法提供任何帮助,只有接口和测试的web端,有遇到不能推流。推流成功网页端有画面有声音,但是安卓端有画面,没…

微信小程序之手机归属地查询

微信小程序之手机归属地查询 需求描述 API申请和小程序设置 API申请 第一步:完整账号注册 我们需要来到如下网站,注册账号:万维易源 第二步:账号注册完成以后,点击右上角的控制台信息。 第三步:在控制…

【机器学习】机器学习的基本分类-监督学习-Lasso 回归(Least Absolute Shrinkage and Selection Operator)

Lasso 回归是一种线性回归方法,通过引入 ​ 正则化(绝对值惩罚项)约束回归系数,既能解决多重共线性问题,又具有特征选择能力。 1. Lasso 回归的目标函数 Lasso 的目标是最小化以下损失函数: 其中&#xff…

优化LabVIEW数据运算效率的方法

在LabVIEW中进行大量数据运算时,提升计算效率并减少时间占用是开发过程中常遇到的挑战。为此,可以从多个角度着手优化,包括合理选择数据结构与算法、并行处理、多线程技术、硬件加速、内存管理和界面优化等。通过采用这些策略,可以…

python学opencv|读取图像(四)imshow()函数尝试

【1】引言 前述已经学习了opencv读取图像的基本操作,包括下述链接: python学opencv|读取图像-CSDN博客 python学opencv|读取图像(二)保存彩色图像-CSDN博客 python学opencv|读取图像(三)放大和缩小图像…

MongoDB分片集群搭建及扩容

分片集群搭建及扩容 整体架构 环境准备 3台Linux虚拟机,准备MongoDB环境,配置环境变量。一定要版本一致(重点),当前使用 version4.4.9 配置域名解析 在3台虚拟机上执行以下命令,注意替换实际 IP 地址 e…

MATLAB 最小二乘平面拟合(90)

MATLAB 最小二乘平面拟合(90) 一、算法介绍二、算法实现1.代码2.结果:一、算法介绍 平面方程: ax+by+cz+d = 0 执行任务:读取一组点云(这里用自定义生成的平面模拟点云代替,在其中添加了噪声来模拟真实的数据),使用最小二乘拟合平面,来输出平面参数,并可视化显示拟…

AI+电影特效产品化:开启电影人物年轻化新时代

随着人工智能技术的不断进步,它正在改变着我们生活的方方面面,包括娱乐产业。在电影制作领域,AI技术的应用尤其引人注目,尤其是在实现演员年轻化或老化效果方面。本文将介绍一款名为MyTimeMach

Appium 安装问题汇总

好生气好生气,装了几天了, opencv4nodejs 和 mjpeg-consumer 就是装不了,气死我了不管了,等后面会装的时候再来完善,气死了气死了。 目录 前言 1、apkanalyzer.bat 2、opencv4nodejs 3、ffmpeg 4、mjpeg-consume…

Cannot resolve symbol ‘ActivityThread‘ | Android 语法

背景 ActivityThread 是 Android 系统内部使用的一个类,它位于 android.app 包中,但在 Android SDK 的公共 API 中并没有公开。 由于 ActivityThread 是隐藏的内部类,因此在编写单元测试或功能开发时,无法直接引用它。可以使用反射来访问内部 API,或者使用依赖注入的方式…

探索自然语言处理奥秘(NLP)

摘要 自然语言处理(NLP)是人工智能领域的一个重要分支,它致力于使计算机能够理解、解释和生成人类语言。这项技术让机器能够阅读文本、听懂语音,并与人类进行基本的对话交流。 通俗理解 自然语言处理(NLP&#xff09…

JAVAWeb中的Servlet学习

一 Servlet简介 1.1动态资源和静态资源 静态资源 无需在程序运行时通过代码运行生成的资源,在程序运行之前就写好的资源.例如:html css js img ,音频文件和视频文件 动态资源 需要在程序运行时通过代码运行生成的资源,在程序运行之前无法确定的数据,运行时动态生成,例如Servle…

「Mac畅玩鸿蒙与硬件40」UI互动应用篇17 - 照片墙布局

本篇将带你实现一个简单的照片墙布局应用,通过展示多张图片组成照片墙效果,用户可以点击图片查看其状态变化。 关键词 UI互动应用照片墙布局Grid 布局动态图片加载用户交互 一、功能说明 照片墙布局应用的特点: 动态加载多张图片组成网格布…

dhcpd服务器的配置与管理(超详细!!!)

前提条件: (1)虚拟机能够联网(如果nat模式不能联网的看另一期) CentOS7 NAT模式不能联网-CSDN博客 (2)系统是Centos8,因为下载的dhcp-server软件包版本和Centos7不匹配,如果你能成…