当前位置: 首页 > news >正文

并发,并行,线程与UI操作

并行和并发是计算机领域中两个相关但不同的概念。

并行(Parallel)指的是同时执行多个任务或操作,它依赖于具有多个处理单元的系统。在并行计算中,任务被分成多个子任务,并且这些子任务可以同时在不同的处理单元上执行,从而加速整体的计算速度。并行计算能够充分利用系统资源,提高计算效率。

并发(Concurrency)指的是多个任务或操作在相同的时间段内交替执行。在并发计算中,任务之间可能不是同时进行的,而是通过快速切换来实现看似同时执行的效果。并发计算通常用于处理多个独立的任务,通过合理地调度和协调这些任务,可以最大限度地提高系统的吞吐量和资源利用率。

简单来说,如果有多个任务需要同时进行,那么采用并行的方式可以同时在不同的处理单元上执行这些任务;而如果多个任务需要在同一时刻内交替执行,那么采用并发的方式可以通过快速切换来实现。

需要注意的是,并行和并发并不是完全互斥的概念,实际应用中也可以同时兼顾并行和并发的优势,以提高系统性能和响应能力。

例子:

问:手机中运行多个应用,是并行还是并发

答:在手机中运行多个应用程序时,通常是采用并发的方式运行。并发指的是多个任务交替执行,每个任务都有机会获得处理器的时间片进行执行。因为处理器的时间片非常短暂,所以给我们的感觉就像是多个任务同时进行。

虽然在手机上可以同时打开多个应用程序,但实际上处理器只能在某一个时间点上执行一个任务。操作系统通过快速切换任务的方式,使得多个应用程序交替执行,从而给我们的感觉是在同时运行多个应用程序。

值得注意的是,并发和并行是两个概念。并行是指多个任务真正地同时执行,需要多个处理器或者多核处理器来实现。而手机通常是单核或者少数几个核心的处理器,所以它无法真正实现并行执行多个应用程序。因此,手机上多个应用程序的运行是通过并发实现的。

问:

答:

在一个应用程序的多个子线程运行过程中,可以既有并发也有并行。

并发是指多个任务交替执行,每个任务都有机会获得处理器的时间片进行执行。在一个应用程序的多个子线程中,如果这些线程是通过时间片轮转的方式交替执行,并且在同一个处理器上执行,那么它们就是并发执行的。

而并行是指多个任务真正地同时执行,需要多个处理器或者多核处理器来实现。在一个应用程序的多个子线程中,如果这些线程能够被分配到不同的处理器核心上并同时执行,那么它们就是并行执行的。

具体是并发还是并行取决于系统的硬件和调度策略。如果系统有多个处理器核心,并且这些子线程能够被分配到不同的核心上同时执行,那么就是并行执行。如果系统只有一个处理器核心,这些子线程通过时间片轮转交替执行,那么就是并发执行。

需要注意的是,并发和并行是相对于线程或任务而言的,并不是绝对的概念。在具体的场景中,可能会存在一些限制或者条件,导致实际的执行情况有所不同。


子线程中不能执行UI操作。

UI 操作指的是与用户界面(User Interface)相关的操作,包括但不限于以下几种:

  1. 更新视图:例如更改 TextView 的文本内容、设置 ImageView 的图片等。
  2. 处理用户输入:例如响应按钮点击事件、处理文本框输入等。
  3. 显示对话框:例如显示警告对话框、确认对话框等。
  4. 启动新的 Activity 或 Fragment:例如通过 startActivity() 方法启动新的 Activity、通过 FragmentTransaction 添加、替换或移除 Fragment。
  5. 更新通知栏:例如发送通知消息、更新通知的进度条等。

在 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 类的枚举和委托&#xff0c…...

【模型评估 06】超参数调优

对于很多算法工程师来说,超参数调优是一件非常头疼的事情。除了根据经验设定所谓的“合理值”之外,一般很难找到合理的方法去寻找超参数的最优取值。而与此同时,超参数对于模型效果的影响又至关重要。有没有一些可行的办法去进行超参数的调优…...

浏览器访问 AWS ECS 上部署的 Docker 容器(监听 80 端口)

✅ 一、ECS 服务配置 Dockerfile 确保监听 80 端口 EXPOSE 80 CMD ["nginx", "-g", "daemon off;"]或 EXPOSE 80 CMD ["python3", "-m", "http.server", "80"]任务定义(Task Definition&…...

《Qt C++ 与 OpenCV:解锁视频播放程序设计的奥秘》

引言:探索视频播放程序设计之旅 在当今数字化时代,多媒体应用已渗透到我们生活的方方面面,从日常的视频娱乐到专业的视频监控、视频会议系统,视频播放程序作为多媒体应用的核心组成部分,扮演着至关重要的角色。无论是在个人电脑、移动设备还是智能电视等平台上,用户都期望…...

iPhone密码忘记了办?iPhoneUnlocker,iPhone解锁工具Aiseesoft iPhone Unlocker 高级注册版​分享

平时用 iPhone 的时候,难免会碰到解锁的麻烦事。比如密码忘了、人脸识别 / 指纹识别突然不灵,或者买了二手 iPhone 却被原来的 iCloud 账号锁住,这时候就需要靠谱的解锁工具来帮忙了。Aiseesoft iPhone Unlocker 就是专门解决这些问题的软件&…...

Cilium动手实验室: 精通之旅---20.Isovalent Enterprise for Cilium: Zero Trust Visibility

Cilium动手实验室: 精通之旅---20.Isovalent Enterprise for Cilium: Zero Trust Visibility 1. 实验室环境1.1 实验室环境1.2 小测试 2. The Endor System2.1 部署应用2.2 检查现有策略 3. Cilium 策略实体3.1 创建 allow-all 网络策略3.2 在 Hubble CLI 中验证网络策略源3.3 …...

Qwen3-Embedding-0.6B深度解析:多语言语义检索的轻量级利器

第一章 引言:语义表示的新时代挑战与Qwen3的破局之路 1.1 文本嵌入的核心价值与技术演进 在人工智能领域,文本嵌入技术如同连接自然语言与机器理解的“神经突触”——它将人类语言转化为计算机可计算的语义向量,支撑着搜索引擎、推荐系统、…...

Nuxt.js 中的路由配置详解

Nuxt.js 通过其内置的路由系统简化了应用的路由配置,使得开发者可以轻松地管理页面导航和 URL 结构。路由配置主要涉及页面组件的组织、动态路由的设置以及路由元信息的配置。 自动路由生成 Nuxt.js 会根据 pages 目录下的文件结构自动生成路由配置。每个文件都会对…...

项目部署到Linux上时遇到的错误(Redis,MySQL,无法正确连接,地址占用问题)

Redis无法正确连接 在运行jar包时出现了这样的错误 查询得知问题核心在于Redis连接失败,具体原因是客户端发送了密码认证请求,但Redis服务器未设置密码 1.为Redis设置密码(匹配客户端配置) 步骤: 1).修…...

Mac下Android Studio扫描根目录卡死问题记录

环境信息 操作系统: macOS 15.5 (Apple M2芯片)Android Studio版本: Meerkat Feature Drop | 2024.3.2 Patch 1 (Build #AI-243.26053.27.2432.13536105, 2025年5月22日构建) 问题现象 在项目开发过程中,提示一个依赖外部头文件的cpp源文件需要同步,点…...

OPENCV形态学基础之二腐蚀

一.腐蚀的原理 (图1) 数学表达式:dst(x,y) erode(src(x,y)) min(x,y)src(xx,yy) 腐蚀也是图像形态学的基本功能之一,腐蚀跟膨胀属于反向操作,膨胀是把图像图像变大,而腐蚀就是把图像变小。腐蚀后的图像变小变暗淡。 腐蚀…...

FFmpeg:Windows系统小白安装及其使用

一、安装 1.访问官网 Download FFmpeg 2.点击版本目录 3.选择版本点击安装 注意这里选择的是【release buids】,注意左上角标题 例如我安装在目录 F:\FFmpeg 4.解压 5.添加环境变量 把你解压后的bin目录(即exe所在文件夹)加入系统变量…...