并发,并行,线程与UI操作
并行和并发是计算机领域中两个相关但不同的概念。
并行(Parallel)指的是同时执行多个任务或操作,它依赖于具有多个处理单元的系统。在并行计算中,任务被分成多个子任务,并且这些子任务可以同时在不同的处理单元上执行,从而加速整体的计算速度。并行计算能够充分利用系统资源,提高计算效率。
并发(Concurrency)指的是多个任务或操作在相同的时间段内交替执行。在并发计算中,任务之间可能不是同时进行的,而是通过快速切换来实现看似同时执行的效果。并发计算通常用于处理多个独立的任务,通过合理地调度和协调这些任务,可以最大限度地提高系统的吞吐量和资源利用率。
简单来说,如果有多个任务需要同时进行,那么采用并行的方式可以同时在不同的处理单元上执行这些任务;而如果多个任务需要在同一时刻内交替执行,那么采用并发的方式可以通过快速切换来实现。
需要注意的是,并行和并发并不是完全互斥的概念,实际应用中也可以同时兼顾并行和并发的优势,以提高系统性能和响应能力。
例子:
问:手机中运行多个应用,是并行还是并发
答:在手机中运行多个应用程序时,通常是采用并发的方式运行。并发指的是多个任务交替执行,每个任务都有机会获得处理器的时间片进行执行。因为处理器的时间片非常短暂,所以给我们的感觉就像是多个任务同时进行。
虽然在手机上可以同时打开多个应用程序,但实际上处理器只能在某一个时间点上执行一个任务。操作系统通过快速切换任务的方式,使得多个应用程序交替执行,从而给我们的感觉是在同时运行多个应用程序。
值得注意的是,并发和并行是两个概念。并行是指多个任务真正地同时执行,需要多个处理器或者多核处理器来实现。而手机通常是单核或者少数几个核心的处理器,所以它无法真正实现并行执行多个应用程序。因此,手机上多个应用程序的运行是通过并发实现的。
问:
答:
在一个应用程序的多个子线程运行过程中,可以既有并发也有并行。
并发是指多个任务交替执行,每个任务都有机会获得处理器的时间片进行执行。在一个应用程序的多个子线程中,如果这些线程是通过时间片轮转的方式交替执行,并且在同一个处理器上执行,那么它们就是并发执行的。
而并行是指多个任务真正地同时执行,需要多个处理器或者多核处理器来实现。在一个应用程序的多个子线程中,如果这些线程能够被分配到不同的处理器核心上并同时执行,那么它们就是并行执行的。
具体是并发还是并行取决于系统的硬件和调度策略。如果系统有多个处理器核心,并且这些子线程能够被分配到不同的核心上同时执行,那么就是并行执行。如果系统只有一个处理器核心,这些子线程通过时间片轮转交替执行,那么就是并发执行。
需要注意的是,并发和并行是相对于线程或任务而言的,并不是绝对的概念。在具体的场景中,可能会存在一些限制或者条件,导致实际的执行情况有所不同。
子线程中不能执行UI操作。
UI 操作指的是与用户界面(User Interface)相关的操作,包括但不限于以下几种:
- 更新视图:例如更改 TextView 的文本内容、设置 ImageView 的图片等。
- 处理用户输入:例如响应按钮点击事件、处理文本框输入等。
- 显示对话框:例如显示警告对话框、确认对话框等。
- 启动新的 Activity 或 Fragment:例如通过 startActivity() 方法启动新的 Activity、通过 FragmentTransaction 添加、替换或移除 Fragment。
- 更新通知栏:例如发送通知消息、更新通知的进度条等。
在 Android 中,UI 操作必须在主线程(也称为 UI 线程)上执行。如果在子线程中执行了 UI 操作,就可能导致程序崩溃或出现其他异常情况。
Activity 跳转属于 UI 操作的一种,因为它涉及到启动新的 Activity 并切换到新的界面。因此,从 Activity A 跳转到 Activity B 是需要在主线程(即 Activity 的生命周期方法中)执行的,而不是在子线程中执行。
因为 UI 操作必须在主线程中执行。为了解决这个问题,你可以使用 runOnUiThread() 方法或 Handler 机制将 UI 操作切换回主线程,然后在主线程中进行 Activity 跳转。
如果你需要在子线程中执行耗时操作,然后根据操作结果进行 Activity 跳转,可以使用 Handler 机制来实现。在子线程中执行耗时操作后,通过 Handler 发送消息到主线程,然后在主线程中接收消息并进行跳转操作。
总结起来,Activity 跳转是一种 UI 操作,必须在主线程中执行。在子线程中执行耗时操作后,可以使用 Handler 机制或其他方式将结果传递到主线程,然后在主线程中进行 Activity 跳转。
Activity负责管理UI组件(例如View)以及处理用户输入和其他交互操作。一个应用程序可以由多个Activity组成,它们之间可以通过Intent进行切换和通信。Activity通常包含一个或多个View,并负责处理View的事件和更新。
Service后台服务用于执行某些长时间运行的任务,下载文件、播放音乐,数据处理、网络请求、数据库操作等。
几种不可以的情况:
主线程中可以启动子线程,但是不能用线程实例去调用方法!!!
进程和线程:
一般,同一应用的所有组件会在相同的进程和线程。也可以是其他的进程和线程。
系统不会为每个组件实例创建单独的线程。在同一进程中运行的所有组件均在界面线程中进行实例化,并且对每个组件的系统调用均由该线程进行分派。
不得通过工作线程操纵界面,而只能通过界面线程操纵界面
后台”或“工作”线程
相关文章:
并发,并行,线程与UI操作
并行和并发是计算机领域中两个相关但不同的概念。 并行(Parallel)指的是同时执行多个任务或操作,它依赖于具有多个处理单元的系统。在并行计算中,任务被分成多个子任务,并且这些子任务可以同时在不同的处理单元上执行…...
react 6种方式编写样式
在React中,编写样式主要有以下几种方式: 1. 内联样式: 直接在React组件中使用style属性来定义样式。这种方式比较适合定义动态的样式,因为它允许你将JavaScript表达式作为样式的值。 2. 外部样式表 :通过创建外部的…...
计算机找不到msvcr100.dll的多种解决方法分享,轻松解决dll问题
msvcr100.dll作为系统运行过程中不可或缺的一部分,它的主要功能在于提供必要的运行时支持,确保相关应用程序能够顺利完成编译和执行。因此,当操作系统或应用程序在运行阶段搜索不到该文件时,自然会导致各类依赖于它的代码无法正常…...
系分笔记数据库反规范化、SQL语句和大数据
文章目录 1、概要2、反规范化3、大数据4、SQL语句5、总结 1、概要 数据库设计是考试重点,常考和必考内容,本篇主要记录了知识点:反规范化、SQL语句及大数据。 2、反规范化 数据库遵循范式的设计,使得多表查询和连接表查询较多的时…...
php实现支付宝商户转账
目录 一:背景介绍 一:准备工作 三:代码实现 一:背景介绍 最近工作中,要用到支付宝的商家转账功能,用php代码实现,网上找的内容,有些是老版本的实现,有些是调用sdk&am…...
并发编程(十一)
性能测试的常用命令 1、Netstat是在内核中访问网络连接状态及其相关信息的程序,它能够显示协议统计和当前TCP/IP的网络连接。 Netstat命令的常用格式如下: netstat -a:显示所有网络连接和侦听端口。 netstat -b:显示在创建网络…...
vue3 指令详解
系列文章目录 TypeScript 从入门到进阶专栏 文章目录 系列文章目录前言一、v-model (双向绑定功能)二、v-bind(用于将一个或多个属性绑定到元素的属性或组件的 prop)三、v-if、v-else、v-else-if(用于根据条件选择性地渲染元素)四、v-show(根…...
数据科学竞赛平台推荐
✅作者简介:人工智能专业本科在读,喜欢计算机与编程,写博客记录自己的学习历程。 🍎个人主页:小嗷犬的个人主页 🍊个人网站:小嗷犬的技术小站 🥭个人信条:为天地立心&…...
安全防御之安全审计技术
安全防御中的安全审计技术是保障信息系统安全的重要手段之一。其主要目标是对信息系统及其活动进行记录、审查和评估,以确保系统符合安全策略、法规要求,并能够及时发现潜在的安全风险和异常行为。通过安全审计,可以对系统中的各种活动进行记…...
C#多窗口那些事儿
目录 1、调用窗体与被调用窗体 2、窗体的本质 3、调用窗体访问被调用窗体内部对象 4、被调用窗体访问调用窗体 (1)被动方式,也就是调用窗体主动给被调用窗体一个“接口” i.调用窗体定义“静态”变量,并将开放的变量复制 ii.在被调用窗体中,使用:调用窗体名.静态变…...
记一次 Redis 数据库迁移
笔者通过一个 Redis 数据库迁移的例子,介绍了迁移脚本的执行思路。 作者:马文斌,MySQL/Redis 爱好者~ 爱可生开源社区出品,原创内容未经授权不得随意使用,转载请联系小编并注明来源。 本文约 500 字,预计阅…...
小学信息科技Python课程第2课:坐标与画笔
一、turtle画布与坐标系 在同一平面互相垂直且有公共原点的两条数轴构成平面直角坐标系。在坐标系中,水平方向的轴都称为x轴,垂直方向的轴都称为y轴 它们相交于O点,在这一个点里,x轴的值为0,y轴的值也为0,所…...
BP神经网络(公式推导+举例应用)
文章目录 引言M-P神经元模型激活函数多层前馈神经网络误差逆传播算法缓解过拟合化结论实验分析 引言 人工神经网络(Artificial Neural Networks,ANNs)作为一种模拟生物神经系统的计算模型,在模式识别、数据挖掘、图像处理等领域取…...
Word不同部分(分节)设置页眉和页码的使用指南——附案例操作
Word页眉和页码分节设置的使用指南 目录 Word页眉和页码分节设置的使用指南摘要1. 插入分节符2. 设置不同的页眉3. 设置不同的页码4. 调整页码的起始值5. 删除或更改分节6. 预览和调整 摘要 在撰写word文档时,我们经常需要在不同的部分应用不同的页眉和页码格式。在…...
Ubuntu按转发HDF5
源码编译流程 下载源代码 wget https://hdf-wordpress-1.s3.amazonaws.com/wp-content/uploads/manual/HDF5/HDF5_1_14_3/src/hdf5-1.14.3.zip 解压 unzip hdf5-1.14.3.zip 进入解压后的目录 cd hdf5-1.14.3 编译 依次执行下面的命令 ./configure --prefix/usr/local/hdf5…...
HCIP OSPF实验
任务: 1.使用三种解决ospf不规则区域的方法 2.路由器5、6、7、8、15使用mgre 3.使用各种优化 4.全网可达 5.保证更新安全 6.使用地址为172.16.0.0/16合理划分 7.每个路由器都有环回 拓扑图&IP划分如下: 第一步,配置IP&环回地址…...
Linux上如何一键安装软件?yum源是什么?Linux如何配置yum源?
这几个问题是Linux操作的入门问题,但是确实也会让刚上手Linux小伙伴头疼一阵,故特有此文,希望能对刚入门的小伙伴有一些帮助~ 众所周知 在linux上在线安装软件需要用到yum命令,经常下述命令来安装 yum install [-y] 包名 #-y的…...
Egg框架搭建后台服务【1】
需求 博客系统升级,本来是用 express 写的,最近发现 Egg 不错,正好学习升级一下。边学边写。 Ps:相同的功能,迭代的写法,由浅入深,做个记录。 开发 初始化 安装 node版本需要 >14.20.0…...
Unity的Camera类——视觉掌控与深度解析(下)
前言 欢迎阅读本篇博客,这章我们将深入探讨 Unity 游戏引擎中 Camera 类的委托和枚举。摄像机在游戏开发中扮演着关键角色,它不仅定义了玩家视角的窗口,还影响着游戏的视觉表达和整体体验。理解和正确使用 Camera 类的枚举和委托,…...
【模型评估 06】超参数调优
对于很多算法工程师来说,超参数调优是一件非常头疼的事情。除了根据经验设定所谓的“合理值”之外,一般很难找到合理的方法去寻找超参数的最优取值。而与此同时,超参数对于模型效果的影响又至关重要。有没有一些可行的办法去进行超参数的调优…...
【根据当天日期输出明天的日期(需对闰年做判定)。】2022-5-15
缘由根据当天日期输出明天的日期(需对闰年做判定)。日期类型结构体如下: struct data{ int year; int month; int day;};-编程语言-CSDN问答 struct mdata{ int year; int month; int day; }mdata; int 天数(int year, int month) {switch (month){case 1: case 3:…...
label-studio的使用教程(导入本地路径)
文章目录 1. 准备环境2. 脚本启动2.1 Windows2.2 Linux 3. 安装label-studio机器学习后端3.1 pip安装(推荐)3.2 GitHub仓库安装 4. 后端配置4.1 yolo环境4.2 引入后端模型4.3 修改脚本4.4 启动后端 5. 标注工程5.1 创建工程5.2 配置图片路径5.3 配置工程类型标签5.4 配置模型5.…...
盘古信息PCB行业解决方案:以全域场景重构,激活智造新未来
一、破局:PCB行业的时代之问 在数字经济蓬勃发展的浪潮中,PCB(印制电路板)作为 “电子产品之母”,其重要性愈发凸显。随着 5G、人工智能等新兴技术的加速渗透,PCB行业面临着前所未有的挑战与机遇。产品迭代…...
Opencv中的addweighted函数
一.addweighted函数作用 addweighted()是OpenCV库中用于图像处理的函数,主要功能是将两个输入图像(尺寸和类型相同)按照指定的权重进行加权叠加(图像融合),并添加一个标量值&#x…...
《用户共鸣指数(E)驱动品牌大模型种草:如何抢占大模型搜索结果情感高地》
在注意力分散、内容高度同质化的时代,情感连接已成为品牌破圈的关键通道。我们在服务大量品牌客户的过程中发现,消费者对内容的“有感”程度,正日益成为影响品牌传播效率与转化率的核心变量。在生成式AI驱动的内容生成与推荐环境中࿰…...
渲染学进阶内容——模型
最近在写模组的时候发现渲染器里面离不开模型的定义,在渲染的第二篇文章中简单的讲解了一下关于模型部分的内容,其实不管是方块还是方块实体,都离不开模型的内容 🧱 一、CubeListBuilder 功能解析 CubeListBuilder 是 Minecraft Java 版模型系统的核心构建器,用于动态创…...
如何将联系人从 iPhone 转移到 Android
从 iPhone 换到 Android 手机时,你可能需要保留重要的数据,例如通讯录。好在,将通讯录从 iPhone 转移到 Android 手机非常简单,你可以从本文中学习 6 种可靠的方法,确保随时保持连接,不错过任何信息。 第 1…...
什么是EULA和DPA
文章目录 EULA(End User License Agreement)DPA(Data Protection Agreement)一、定义与背景二、核心内容三、法律效力与责任四、实际应用与意义 EULA(End User License Agreement) 定义: EULA即…...
如何在最短时间内提升打ctf(web)的水平?
刚刚刷完2遍 bugku 的 web 题,前来答题。 每个人对刷题理解是不同,有的人是看了writeup就等于刷了,有的人是收藏了writeup就等于刷了,有的人是跟着writeup做了一遍就等于刷了,还有的人是独立思考做了一遍就等于刷了。…...
在web-view 加载的本地及远程HTML中调用uniapp的API及网页和vue页面是如何通讯的?
uni-app 中 Web-view 与 Vue 页面的通讯机制详解 一、Web-view 简介 Web-view 是 uni-app 提供的一个重要组件,用于在原生应用中加载 HTML 页面: 支持加载本地 HTML 文件支持加载远程 HTML 页面实现 Web 与原生的双向通讯可用于嵌入第三方网页或 H5 应…...
