【iOS】多线程基础
【iOS】多线程基础
文章目录
- 【iOS】多线程基础
- 前言
- 进程与线程
- 进程
- 进程的状态
- 进程的一个控制结构
- 进程的上下文切换
- 线程
- 为什么要用线程
- 什么是线程
- 线程和进程的关系
- 线程的上下文切换
- 线程和进程的优缺点
- 小结
前言
笔者由于对于GCD不是很了解,导致了项目中网络请求哪部分的一个代码冗长且逻辑混乱,很多时候出现了问题也不知道怎么解决,所以笔者决定学习一下多线程的内容,方便自己之后对于GCD的一些内容的理解。
进程与线程
对于任何一个学习计算机的人而言,对于进程和线程这两个词语一定不陌生,但是要具体说出二者的区别,可能还是会支支吾吾说不出个所以然,这里笔者简单介绍一下有关进程和线程的内容。
进程
我们编写的代码都只是一个存储在计算机硬盘的一个静态文件,通过编译后会变成一个二进制可执行文件,当我们运行这个可执行文件后,他会进入内存中,然后我们计算机的cpu会开始执行这个程序的每一条指令,这时候这个运行中的程序就被称作进程, 也就是这个运行的程序实例被叫做进程。
用官方一点的话来讲就是:进程(Process)是计算机中具有一定独立功能
的程序关于某个数据集合的一次运行活动。 它可以申请和拥有系统资源,是系统进行资源分配和调度
的基本单位(有了多道程序的概念,操作系统就可以对每个程序进行资源的分配)。
这时候,我们的计算机如果执行一个读取硬盘文件的数据内容被执行了,当运行执行读取文件的指令的时候,cpu开始从硬盘读取数据,这里我们不难发现一个问题,我们计算机读取硬盘的顺序是非常缓慢的,如果我们一直让计算机等待这个文件执行完然后在执行下面的内容的话,我们会浪费很多时间,cpu的利用率是非常的低下的。
举个例子,就好比我们吃饭的时候我们一直等待厨师把饭做好,在这期间我们什么事情也不做,就单纯的等待吃饭,这时候我们一般会去抽时间做不同的事情,然后等厨师做好饭就回来吃。所以现在的计算机也采用了这种思想,如果在执行一个进程中读取文件的内容的时候,cpu会切换到另一个进程中去执行另一个进程的相关内容,当硬盘的数据返回的时候,cpu会收到一个中断,cpu在回来执行这个进程的内容。
这种 多个程序,交替执行的思想,就是cpu管理多个进程的初步想法。虽然一个单核的cpu在某一刻只能执行一个进程,但是在一个时间段内却可以执行多个进程,这样就会给我们产生一种并行的错觉,好像这几个进程是一起执行的,但是实际上这种方式叫做并发
现在的主流操作系统都是支持”多任务“的操作系统。
举个例子:也就是操作系统可以同时运行多个任务。比如,你可以一边用浏览器上网,一边听音乐,一边写代码,对于操作系统而言,这就是多任务。
这种并发的效果是通过什么实现的呢?这里笔者引用一段博客:
答案就是时间片轮转调度:简单地说就是把一个处理器划分为若干个短的时间片,每个进程会被操作系统分配一个时间片(即每次被 CPU 选中来执行当前进程所用的时间),每个时间片依次轮流地执行处理各个应用程序,时间一到,无论进程是否运行结束,操作系统都会强制将 CPU 这个资源转到另一个进程去执行,由于一个时间片很短,相对于一个应用程序来说,就好像是处理器在为自己单独服务一样,从而达到多个应用程序在同时进行的效果。通俗的说就是讲时间分为一个个极短的时间段,在相应的时间短中执行相应的程序,因为时间段的时间极短,在我们和程序看来就好像是CPU同时处理多个进程一样。
【iOS】—— 多线程编程八重曲之(一)- 多线程基础
正如同上图每一个方块都是一个时间片,我们的计算机会给这三个程序分配对应的时间片,先运行一个程序,在这个时间片用完之后迅速切换到另一个进程中,再次执行对应的一个时间片,就这样循环往复从而实现了一个并发的效果(原因是时间片非常的短暂,人察觉不出来他的区别)。
进程的状态
在上面的多进程的例子中,我们发现进程大致有着 运行—暂停—运行的一个活动规律,就一般情况来说,一个进程不是自始自终连续不停的运行的,他与并发执行中的其他进程的执行是互相制约的。
所以一个进程在活动期间主要具备了三个基本状态: 运行状态, 就绪状态, 阻塞状态
- 运行:进程占用cpu
- 就绪:可运行,但是因为某些原因停止运行
- 阻塞:该进程正在等待某一事件的发生而停止运行
自然还会有另外两个状态,创建和结束的状态
这里笔者直接引用一段别的大佬对于这个状态变迁的描述
图片来自:进程管理
其实进程还有被挂起的一个状态,笔者这里还不是很能理解相关内容,这里涉及到了一个虚拟内存的内容,笔者会在之后了解相关内容。
进程的一个控制结构
在操作系统中是采用 **程序控制块(PCB)**这个数据结构来描述进程的。PCB是一个进程存在的唯一标识,这里笔者可以结合mac的一个活动监视器来解释相关内容。
他包含以下内容:
进程描述内容:
- 进程标识符,也就是上图中的PID
- 用户标识符,就是上图中用户对应的内容。
进程控制和管理信息
- 进程的一个状态,如new,ready
- 进程优先级,进程抢占cpu的优先级
资源分配清单
- 有关内存地址空间的信息
cpu相关信息
- CPU各种寄存器的值,以便进程被重新执行后,都能从断点处继续执行。
通过PCB我们就可以实现一个多进程的一个并发。而PCB与PCB之间是用链表来组织的,将就绪状态的进程链接在一起,就是就绪队列。将等待状态的进程链接在一起叫做阻塞队列。
进程的上下文切换
前面我们提到进程间的切换,这个从一个进程切换到另一个进程中运行,被称为上下文切换。
我们也提到了现在的操作系统都是多任务的,所以在每个任务运行钱需要知道任务从哪里进行一个加载,从哪里开始运行。
这个时候,我们就啊哟先帮cpu设置好寄存器和程序计数器。
前者是一块运行速度极快的内存,后者是一个cpu将要执行指令的位置,或者即将执行的下一条指令的位置。这两个部分是CPU执行任何任务前,必须依赖的环境,这个环境就叫做CPU上下文。
所以CPU上下文切换接可以理解为:
CPU 上下文切换就是先把前一个任务的CPU上下文(CPU 寄存器和程序计数器)保存起来,然后加载新任务的上下文到这些寄存器和程序计数器,最后再跳转到程序计数器所指的新位置,运行新任务。
cpu的上下文切换分成:进程上下文, 线程上下文, 中断上下文
进程的上下文主要包含了:虚拟内存, 栈, 全句变量等用户需要的资源,还包含了寄存器和内核堆栈的等内核空间的资源。
线程
为什么要用线程
这里笔者直接引用一段话:
在早期的操作系统中并没有线程的概念,进程是拥有资源和独立运行的最小单位。任务调度采用的是
时间片轮转
的抢占式调度
方式,而进程作为任务调度的最小单位,每个进程有各自独立的一块内存,使得各个进程之间内存地址相互隔离。后来,随着计算机技术的发展,可运行的进程越来越多。进程出现了很多弊端,一是由于进程是资源拥有者,创建、撤消与切换存在较大的时空开销,因此需要引入轻型进程;二是由于对称多处理机(SMP)的出现,可以满足多个运行单位,而多个进程并行开销过大。因此出现了能独立运行的基本单位 —— 线程(Threads)。【iOS】—— 多线程编程八重曲之(一)- 多线程基础
其实线程的出现,主要还是为了减少上下文切换的时候浪费的系统开销,线程之间可以并发运行且共享相同的地址空间,从而减小了进程上下文切换的开销,让程序运行更加流畅。
什么是线程
线程是程序执行中一个单一
的顺序控制
流程,是程序执行流的最小单元,是处理器调度和分派
的基本单位。
同一进程中内多个线程可以共享代码段,数据段,打开的文件等资源。但是每个线程由自己独立的寄存器和栈,可以保证线程的控制流是独立的
优点
- 一个进程中可以有多个线程
- 各个线程中可以并发的执行
- 各个线程之间可以共享地址内存和文件等资源
缺点
- 某一进程中的一个线程崩溃可能导致该进程内其他线程的的崩溃。
线程和进程的关系
- 线程是依附于进程的,不能独立存在,它包含在进程之中,是进程中的实际运作单位。进程一旦结束,所有线程都结束。
- 一个线程只能属于一个进程,而一个进程可以有多个线程,但至少有一个线程。
- 线程是进程中的一个执行单元,由CPU独立调度执行,负责当前进程中任务的执行。一个进程可以有一个或多个线程,线程会拥有自己的堆栈和局部变量(不共享),但是它与同一进程中的多个线程将共享程序的内存空间,也就是该进程中的代码段(代码和常量),数据段(全局变量和静态变量),扩展段(堆存储)等系统资源。
线程的上下文切换
线程和进程最大的区别在于:线程是调度的基本单位,而进程则是资源拥有的基本单位
- 在一个进程中如果只有一个线程,那么可以吧这个进程当作一个线程
- 当进程拥有多个线程是,这些线程会共享相同的虚拟内存和全局变量等资源,这些资源在上下文切换的时候是不需要修改的。
那我们线程的上下文切换是需要保存那些内容呢?
-
如果在同一进程下
那么切换的时候,只用切换线程的私有数据,比方说寄存器等不共享的数据
-
如果不在同一进程下
那么他的上下文切换和进程上下文一样
所以线程的上下文切换相比进程,开销要小很多,所以我们有了多线程的优点
线程和进程的优缺点
多任务既可以由多进程实现,也可以由单进程内的多线程实现,还可以混合多进程+多线程。混合多进程和多线程的程序涉及到同步、数据共享的问题,这种模型更复杂,实际很少采用。
和多进程相比,多线程的优势在于:
- 线程的调度与切换比进程快很多,同时创建一个线程的开销也比进程要小很多;
线程之间的通信更方便,同一进程下的线程共享全局变量、静态变量等数据,线程间通信就是读写同一个变量,速度很快。而进程之间的通信需要以通信的方式(Inter Process Communication,IPC)进行。
而多进程的优点在于:
- 多进程程序更健壮,在多进程的情况下,一个进程崩溃不会影响其他进程,而在多线程的情况下,任何一个线程崩溃会直接导致整个进程崩溃。
小结
笔者这篇文章简单介绍了有关线程和进程的内容,笔者才疏学浅,如有纰漏还请不吝指出。以及笔者对于调度的内容还没有进行一个学习,之后学习会补充上去,接下来才可以方便我们理解iOS中GCD各个函数的一个意义。
参考博客:
【iOS】—— 多线程编程八重曲之(一)- 多线程基础
进程管理
相关文章:
【iOS】多线程基础
【iOS】多线程基础 文章目录 【iOS】多线程基础前言进程与线程进程进程的状态进程的一个控制结构进程的上下文切换 线程为什么要用线程什么是线程线程和进程的关系线程的上下文切换 线程和进程的优缺点 小结 前言 笔者由于对于GCD不是很了解,导致了项目中网络请求哪…...
c#控制台项目的发布+相对路径的用法(绝对路径下素材丢失问题)
发布 生成 ->发布选定任务 生成了以后,素材需要手动拖过去 文件相对路径...
Keil5配色方案修改为类似VSCode配色
1. 为什么修改Keil5配色方案 视觉习惯:如果你已经习惯了VSCode的配色方案,尤其是在使用ESP-IDF开发ESP32时,Keil5的默认配色可能会让你感到不习惯。减少视觉疲劳:Keil5的默认背景可能过于明亮,长时间使用可能会导致视…...
网络安全框架及模型-PPDR模型
网络安全框架及模型-PPDR模型 概述: 为了有效应对不断变化的网络安全环境,人们意识到需要一种综合性的方法来管理和保护网络安全。因此,PPDR模型应运而生。它将策略、防护、检测和响应四个要素结合起来,提供了一个全面的框架来处理网络安全问题。 工作原理: PPDR模型的…...
Observability:如何在 Kubernetes pod 中轻松添加应用程序监控
作者:来自 Elastic Jack Shirazi•Sylvain Juge•Alexander Wert Elastic APM K8s Attacher 允许将 Elastic APM 应用程序代理(例如 Elastic APM Java 代理)自动安装到 Kubernetes 集群中运行的应用程序中。该机制使用变异 webhook࿰…...
solana粗略的学习总结
最近在研究solana 的东西,简单做一下总结,很久没有写文章了。写的不对的地方欢迎评论区或者私信。及时改正。 Solana 架构概述 1.0 核心模块 Solana 的架构包括以下核心模块: Proof of History (PoH):通过时间排序机制优化交易…...
【Pip】完整的 `pip` 配置文件详解:优化你的包管理与环境设置
目录 引言一、pip 配置文件概述1.1 配置文件的位置1.2 配置文件的格式 二、常见配置选项详细说明2.1 设置镜像源2.2 配置超时时间2.3 配置下载缓存2.4 配置安装选项2.5 配置信任主机2.6 配置代理2.7 配置包安装路径 三、pip 配置文件的进阶设置3.1 包源(Channels&am…...
pytorch加载预训练权重失败
问题 给当前模型换了个开源的主干网络,并且删除了某些层后,但是发现预训练权重一直加载不上。strict为True时加载报错,strict为False时又什么都加载不上,然后不知道哪里出问题了。 解决 当strict为False时,load_sta…...
mysql线上问题集合
1、too many connections 连接数量太多,可以先通过以下命令先调整最大连接数,得以连接上mysql进行问题排查。 临时修改: gdb -p mysql进程id -ex "set max_connections500" -batchgdb:这是 GNU 调试器,用于…...
Kafka从指定时间开始消费数据
需求-故障定位:flink消费kafka数据,某个时间点漏数据 背景:kafka数据保留3天,如果第二天,发现程序异常导致数据丢失,需要定位是topic源头无数据,还是程序处理出现异常。 # 1, 设置一个新的gro…...
Android 俩个主题的不同之处 “Theme.AppCompat vs android:Theme.Material.Light.NoActionBar”
这两种主题继承关系有明显的不同,具体区别如下: Theme.AppCompat vs android:Theme.Material.Light.NoActionBar Theme.AppCompat 是 AppCompat 支持库提供的主题,目的是提供向后兼容的支持,适用于较早版本的 Android(…...
FreeSWITCH mod_conference 的按键会控
又是一篇命题作文 mod_conference 官方文档: https://developer.signalwire.com/freeswitch/FreeSWITCH-Explained/Modules/mod_conference_3965534/ 英文不好的可以看中文: http://www.freeswitch.org.cn/books/references/1.7-mod_conference.html…...
LSTM-CNN-BP-RF-SVM五模型咖喱融合策略混合预测模型
目录 效果一览基本介绍程序设计参考资料 效果一览 基本介绍 LSTM-CNN-BP-RF-SVM五模型咖喱融合策略混合预测模型 Matlab代码注释清晰。 程序设计 完整程序和数据获取方式:私信博主回复LSTM-CNN-BP-RF-SVM五模型咖喱融合策略混合预测模型(Matlab&#…...
LeetCode 64. 最小路径和(HOT100)
第一次错误代码: class Solution { public:int minPathSum(vector<vector<int>>& grid) {int dp[205][205] {0};int m grid.size(),n grid[0].size();for(int i 1 ;i<m;i){for(int j 1;j<n;j){dp[i][j] min(dp[i][j-1],dp[i-1][j])gr…...
SQL基础语法全解析(上篇)
一、基本概念 1. 数据库术语 数据库(database) - 保存有组织的数据的容器(通常是一个文件或一组文件)。数据表(table) - 某种特定类型数据的结构化清单。模式(schema) - 关于数据库…...
蓝牙定位的MATLAB程序,四个锚点、三维空间
这段代码通过RSSI信号强度实现了在三维空间中的蓝牙定位,展示了如何使用锚点位置和测量的信号强度来估计未知点的位置。代码涉及信号衰减模型、距离计算和最小二乘法估计等基本概念,并通过三维可视化展示了真实位置与估计位置的关系。 目录 程序描述 运…...
vue3-Import declaration conflicts with local declaration of dayjs
同步发布于我的网站 🚀 概述错误描述 原代码报错信息 原因分析解决方案 修改导入语句使用泛型 代码解释总结 概述 在使用 Vue3 和 dayjs 时,可能会遇到一个常见的错误:“Import declaration conflicts with local declaration of ‘dayjs’…...
node.js基础学习-express框架-静态资源中间件express.static(十一)
前言 在 Node.js 应用中,静态资源是指那些不需要服务器动态处理,直接发送给客户端的文件。常见的静态资源包括 HTML 文件、CSS 样式表、JavaScript 脚本、图片(如 JPEG、PNG 等)、字体文件和音频、视频文件等。这些文件在服务器端…...
通过waitress启动flask应用
假设你有一个名为 app.py 的文件,app 是指你的 Flask 应用实例。并且在这个文件中创建了一个 Flask 应用实例,那么你可以这样导入和使用它。 示例结构 假设你的项目结构如下: my_flask_app/ │ ├── app.py ├── waitress_server.py └─…...
linux 获取公网流量 tcpdump + python + C++
前言 需求为,统计linux上得上下行公网流量,常规得命令如iftop 、sar、ifstat、nload等只能获取流量得大小,不能区分公私网,所以需要通过抓取网络包并排除私网段才能拿到公网流量。下面提供了一些有效得解决思路,提供了…...
【阅读记录-章节5】Build a Large Language Model (From Scratch)
目录 5. Pretraining on unlabeled data5.1 Evaluating generative text models5.1.1 Evaluating generative text models5.1.2 Calculating the text generation loss评估模型生成文本的质量 5.1.3 Calculating the training and validation set losses 5.2 Training an LLM5.…...
神经网络中的优化方法(一)
目录 1. 与纯优化的区别1.1 经验风险最小化1.2 代理损失函数1.3 批量算法和小批量算法 2. 神经网络中优化的挑战2.1 病态2.2 局部极小值2.3 高原、鞍点和其他平坦区域2.4 悬崖和梯度爆炸2.5 长期依赖2.6 非精确梯度2.7 局部和全局结构间的弱对应 3. 基本算法3.1 随机梯度下降(小…...
输出1~n中能被3整除,且至少有一位数字是5的所有整数.:JAVA
链接:登录—专业IT笔试面试备考平台_牛客网 来源:牛客网 输出1~n中能被3整除,且至少有一位数字是5的所有整数. 输入描述: 输入一行,包含一个整数n。(1 < n < 100000) 输出描述: 输出所有满足条件的数,以换…...
MySQL 主从同步一致性详解
MySQL主从同步是一种数据复制技术,它允许数据从一个数据库服务器(主服务器)自动同步到一个或多个数据库服务器(从服务器)。这种技术主要用于实现读写分离、提升数据库性能、容灾恢复以及数据冗余备份等目的。下面将详细…...
html+css网页设计 旅游 马林旅行社3个页面
htmlcss网页设计 旅游 马林旅行社3个页面 网页作品代码简单,可使用任意HTML辑软件(如:Dreamweaver、HBuilder、Vscode 、Sublime 、Webstorm、Text 、Notepad 等任意html编辑软件进行运行及修改编辑等操作)。 获取源码 1&#…...
【短视频矩阵系统==saas技术开发】
在数字媒体领域,短视频的崛起已不可忽视。对于商业实体而言,掌握如何通过短视频平台有效吸引潜在客户并提高转化率,已成为一项关键课题。本文旨在深入剖析短视频矩阵系统的构成与作用机制,以期为企业提供一套系统化的策略…...
MongoDB-BSON 协议与类型
前言: MongoDB 是一个高性能、无模式的 NoSQL 数据库,广泛应用于大数据处理和实时数据存储。作为一个数据库系统,MongoDB 的核心之一就是其使用的 BSON(Binary JSON)格式,它用于存储数据以及在客户端和数据…...
论文:IoU Loss for 2D/3D Object Detection
摘要:在2D/3D目标检测任务中,IoU (Intersection-over- Union)作为一种评价指标,被广泛用于评价不同探测器在测试阶段的性能。然而,在训练阶段,通常采用常见的距离损失(如L1或L2)作为损失函数,以最小化预测值…...
Electron-vue 框架升级 Babel7 并支持electron-preload webapck 4 打包过程记录
前言 我这边一直用的electron-vue框架是基于electron 21版本的,electron 29版本追加了很多新功能,但是这些新功能对开发者不友好,对electron构建出来的软件,使用者更安全,所以,我暂时不想研究electron 29版…...
信创改造 - Redis -》TongRDS 安装方式之单节点模式安装
安装前准备 安装 JDK 参考链接:安装 JDK 8【Linux】 语雀 创建用户 # 用户名可以自己起 useradd rds 上传安装包到服务器 单节点模式是由两个部署单元组成:1 个RDS 服务节点,1 个 RDS 中心节点。 上传到 /home/rds 用户文件夹࿰…...
经典C语言代码——part 19(链表)
【程序72】 题目:创建一个链表。 1.程序分析: 2.程序源代码: /*creat a list*/ #include "stdlib.h" #include "stdio.h" struct list { int data; struct list *next; }; typedef str…...
【Leetcode 每日一题】52. N 皇后 II
问题背景 n n n 皇后问题 研究的是如何将 n n n 个皇后放置在 n n n \times n nn 的棋盘上,并且使皇后彼此之间不能相互攻击。 给你一个整数 n n n,返回 n n n 皇后问题 不同的解决方案的数量。 数据约束 1 ≤ n ≤ 9 1 \le n \le 9 1≤n≤9 解题…...
Scala的模式匹配(1)
package hfdobject Test34_1 {def main(args: Array[String]): Unit {//从数据库中获得数据 1,2,3,4//要显示给用户的是 一等,二等,三等,四等val level1val levelTxtlevel match {case 1>"一等&q…...
Oracle 11G DataGuard GAP 修复过程(通过主库scn增备恢复)
Oracle 11G DataGuard GAP 修复 (通过主库scn增备恢复) 介绍 DG GAP 顾名思义就是:DG不同步,当备库不能接受到一个或多个主库的归档日志文件时候,就发生了 GAP。 那么,如果遇到GAP如何修复呢?…...
redis的应用----缓存
redis的应用----缓存 一、缓存的概念二、使用redis作为缓存2.1使用redis作为缓存的原因2.2缓存机制的访问步骤 三、缓存的更新策略3.1定期更新3.2实时更新3.3淘汰策略 四、缓存常见的问题4.1缓存预热(Cache preheating)4.2缓存穿透(Cache penetration)4.3缓存雪崩(Cache avalan…...
「Mac畅玩鸿蒙与硬件41」UI互动应用篇18 - 多滑块联动控制器
本篇将带你实现一个多滑块联动的控制器应用。用户可以通过拖动多个滑块,动态控制不同参数(如红绿蓝三色值),并实时显示最终结果。我们将以动态颜色调节为例,展示如何结合状态管理和交互逻辑,打造一个高级的…...
SpringBoot两天
SpringBoot讲义 什么是SpringBoot? Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程。该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置。通过这种方式…...
基于Java Springboot诗词学习APP且微信小程序
一、作品包含 源码数据库设计文档万字PPT全套环境和工具资源部署教程 二、项目技术 前端技术:Html、Css、Js、Vue、Element-ui 数据库:MySQL 后端技术:Java、Spring Boot、MyBatis 三、运行环境 开发工具:IDEA/eclipse微信开…...
3.建立本地仓库及常用命令
1.建立本地仓库 要使用Git对我们的代码进行版本控制,首先需要获得本地仓库 1)在电脑的任意位置创建一个空目录,作为我们的本地Git仓库 2)进入这个目录,右键点击Git Bash 窗口 3)执行命令git init 4) 如果创…...
【Linux——实现一个简易shell】
黑暗中的我们都没有说话,你只想回家,不想你回家............................................................... 文章目录 前言 一、【shell工作过程】 二、【命令行参数】 2.1、【获取命令行参数】 1、【输出命令行提示符】 2、【输入命令行参数】 2…...
python使用python-docx处理word
文章目录 一、python-docx简介二、基本使用1、新建与保存word2、写入Word(1)打开文档(2)添加标题(3)添加段落(4)添加文字块(5)添加图片(6…...
Typora设置自动上传图片到图床
Typora设置自动上传图片到图床 方法一:使用php 打开设置界面: 自定义命令: php F:/WWW/php-library/TyporaUploadImage.php ${filename}php代码: # TyporaUploadImage.php <?php // Set the API endpoint URL // $apiUrl…...
如何进行Appium实现移动端UI自动化测试呢?
🍅 点击文末小卡片 ,免费获取软件测试全套资料,资料在手,涨薪更快 Appium是一个开源跨平台移动应用自动化测试框架。 既然只是想学习下Appium如何入门,那么我们就直奔主题。文章结构如下: 为什么要使用…...
PHP语法学习(第三天)
老规矩,先回顾一下昨天学习的内容 PHP语法学习(第二天) 主要学习了PHP变量、变量的作用域、以及参数作用域。 今天由Tom来打开新的篇章 文章目录 echo 和 print 区别PHP echo 语句实例 PHP print 语句实例 PHP 数组创建数组利用array() 函数 数组的类型索引数组关联…...
mac访达打开终端
选择文件夹打开 选中文件夹,然后右键即可: 在当前文件夹打开 在访达的当前文件夹长按option键 左下角出现当前文件夹路径 右键即可打开终端...
游戏引擎学习第30天
仓库: https://gitee.com/mrxiao_com/2d_game 回顾 在这段讨论中,重点是对开发过程中出现的游戏代码进行梳理和进一步优化的过程。 工作回顾:在第30天,回顾了前一天的工作,并提到今天的任务是继续从第29天的代码开始,…...
git将远端库地址加入到本地库中
git将远端库地址加入到本地库中 git remote add test https://test.git其中test表示远端库的名称,url表示远端库的地址,这样添加后在.git/config配置文件中就能够看到新的remote已经被添加,并且通过git remote -v能够看到新添加的远端库...
学习HTML第三十五天
学习文章目录 一.全局属性二..meta 元信息 一.全局属性 常用的全局属性 id 给标签指定唯一标识,注意: id 是不能重复的。 作用:可以让 label 标签与表单控件相关联;也可以与 CSS 、 JavaScript 配合使 用class 给标签指定类名&a…...
MySQL 事务和索引
关于 MySQL 事务特性、 索引特性。 请你简单解释一下 MySQL 事务是什么? 事务是一组数据库操作,这些操作要么全部成功执行,要么全部不执行。它是一个不可分割的工作单元,用于保证数据的一致性和完整性。 请详细阐述一下事务的 AC…...
Matlab学习笔记
Magic Traits 文件读取 fid fopen(fn,rt);out fscanf(fid,spec,inf);fclose(fid);2. 读取数据 fid fopen(fn,rt); out textscan(fid,spec);运算篇 fprintf(" xxx %d",a),当a为数组时,会输出数组数目行,每行是一个元素相关文…...
多省份调整预算:透露化债细节,“6万亿”影响几何?
自全国人大常委会批准新增6万亿元地方政府债务限额置换存量隐性债务后,近期多个省份密集调整预算,透露了当地获得置换隐性债务的发债额度,6万亿化解地方政府隐性债务风险(化债)的“蛋糕”如何在省份中划分日渐清晰。比如,江西省财政厅公开的《关于2024…...
毛主席论“走资派”:你太高看他们了,他们懂得什么是资本主义吗?
1972年,有人曾经就资本主义在中国复辟的问题向毛主席请教。毛主席轻蔑地说:“你太高看他们了,他们懂得什么是资本主义吗?最多是倒退回半封建半殖民地社会去了。资本主义是靠侵略和掠夺别的国家的财富而积累资本资产的,而搞修正主义的走资派敢于侵略谁呀,不被侵略…...
波杰姆斯基:我只想打出侵略性 果断进攻提升投篮
在11月30日的NBA比赛中,热火以121-111击败猛龙。赛后,热火主教练斯波接受了采访。谈到哈克斯的表现,斯波表示希望他能更具侵略性。这种侵略性不仅体现在进攻端的责任感上,还需要吸引对方的第二个防守者。如果哈克斯继续找到自己的进攻位置,球队会支持他。他在接球时非常果…...
张艺谋夫妇携儿女公开现身 亮相巴黎名媛舞会
12月1日,一年一度的“巴黎名媛舞会”圆满结束。著名导演张艺谋及其女儿张壹娇、香港男星任达华及其女儿任晴佳均出席了此次活动。合影中,张壹娇站在第一排,而任晴佳则站在最后。不过,据任达华的妻子琦琦透露,主办方早在任晴佳14岁时就曾邀请她参加,直到今年20岁才同意让她…...
单霁翔为保护故宫地面坚持穿布鞋
故宫博物院学术委员会主任单霁翔接受访谈,与观众分享自己在故宫内外的精彩故事,单霁翔曾于2012年至2019年在担任故宫博物院院长,在任期间推动了故宫的古建筑修缮工作,为保护故宫地砖的完好,单霁翔在日常中坚持穿布鞋,并把这个习惯一直保留了下来,风雨无阻,始终如一。责…...
催收班里的老板 学习讨债新招数
关于催收,常见的方法包括电话、短信、发函和起诉。然而,有时候更柔和的方式如请客吃饭可能更有效。去年底,在上海一家日料店的包厢内,陈立雄和他的妻子带着两瓶茅台和茶叶,桌上放着一份施工确认清单。这是一次为了讨债而设的饭局。陈立雄是建筑公司老板,年初接了一个百万…...