当前位置: 首页 > 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】超参数调优

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

Matlab 字符识别OCR实验

Matlab 字符识别实验 图像来源于屏幕截图,要求黑底白字。数据来源是任意二进制文件,内容以16进制打印输出,0-9a-f’字符被16个可打印字符替代,这些替代字符经过挑选,使其相对容易被识别。 第一步进行线分割和字符分割…...

Docker Compose 部署 jenkins

Docker Compose 部署 jenkins jenkins 部署 Docker-Compose 部署 version: 3.1 services:jenkins:image: jenkinsci/blueoceanvolumes:- /data/jenkins/:/var/jenkins_home- /var/run/docker.sock:/var/run/docker.sock- /usr/bin/docker:/usr/bin/docker- /usr/lib/x86_64-…...

QT:使用QStyle实现QMenu的滚动效果

项目中,使用QMenu,多个QAction时 超出页面范围,需要菜单栏可以上下滚动。 实际QMenu是带滚动的,但是要知道怎么使用 还是需要查看QT源码,现在简单记录下我的使用方法。 QT源码中:q->style()->style…...

双指针问题——求只包含两个元素的最长连续子序列(子数组)

一,题目描述 你正在探访一家农场,农场从左到右种植了一排果树。这些树用一个整数数组 fruits 表示,其中 fruits[i] 是第 i 棵树上的水果 种类 。 你想要尽可能多地收集水果。然而,农场的主人设定了一些严格的规矩,你必…...

Unity组件开发--短连接HTTP

1.网络请求管理器 using LitJson; using Cysharp.Threading.Tasks; using System; using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.Networking; using UnityEngine.Events;using System.Web; using System.Text; using Sy…...

真正的强大,原来是不动声色的

当一个人走过了绝境,他就会发现,真正的强大,原来是不动声色的。 他会停止一切自证,不再解释,话越来越少,眼神越来越坚定。 他不再模棱两可,唯唯诺诺,而是敢于断然拒绝,…...

git 查看tag和创建tag以及上传tag命令

文章目录 git 查看tag和创建tag以及上传tag命令git tagtag操作常用命令 git 查看tag和创建tag以及上传tag命令 git tag 如果你达到一个重要的阶段,并希望永远记住那个特别的提交快照,你可以使用 git tag 给它打上标签。 Git 的 tag 功能是一个非常有用…...

代码随想录二刷 |二叉树 | 二叉搜索树的最小绝对差

代码随想录二刷 |二叉树 | 二叉搜索树的最小绝对差 题目描述解题思路 & 代码实现递归法迭代法 题目描述 530.二叉搜索树的最小绝对差 给你一棵所有节点为非负值的二叉搜索树,请你计算树中任意两节点的差的绝对值的最小值。 示例&#…...

【Linux】Linux 系统编程——tree 命令

文章目录 1. 命令概述2. 命令格式3. 常用选项4. 相关描述4.1 tree 命令安装 5. 参考示例5.1 创建树形目录5.2 使用 tree 命令查看树形目录 1. 命令概述 tree 命令用于在命令行界面以树状图形式显示目录及其子目录的内容。这个命令递归地列出所有子目录,并可选择显示…...

Android简单控件

1.文本显示 设置文本内容的两种方式&#xff1a; 在XML文件中通过属性 android:text 设置文本 <resources><string name"app_name">chapter03</string><string name"hello">你好&#xff0c;世界</string> </resources&…...

海口新闻头条最新消息/seo短视频网页入口引流下载

2014-11-13 四 By youngsterxyf 概述 Yii框架将各种功能封装成组件&#xff0c;使用时按需配置加载&#xff0c;从而提高应用的性能。内置的组件又分为核心组件与非核心组件&#xff0c;核心组件是任何Web应用和Console应用都需要的。 此外&#xff0c;应用开发者还可以按照一定…...

win8导航网站模板/广告公司取名字参考大全

德这个东西&#xff0c;空洞,难量化 不同的组织&#xff0c;机构&#xff0c;不同的国家&#xff0c;种族&#xff0c;民族&#xff0c;不同的宗教 标准不同&#xff0c;同一件事放在不同的时代&#xff0c;评价可能截然相反 毁人誉己是违反道德的一个具体案例 人的一生要经历多…...

给别人做违法网站/免费舆情网站

如果我们在Linux 系统上安装了某个软件&#xff0c;我们可以通过如下的三种方式来确定。 一&#xff0e; Which 命令 Shell 的which 命令可以找出相关命令是否已经在搜索路径中。 如&#xff1a; [rootlocalhost ~]# which gcc /usr/bin/gcc 二&#xff0e; Whe…...

如何让搜索引擎快速收录网站/培训机构是干什么的

linux 第一章 硬件&#xff1a; (1) cpu:如Intel8086包括i386 (2) 内存:RAM (3)存储设备: 硬盘,CD-ROM&#xff0c;软盘和磁带 (4)输入输出设备:鼠标&#xff0c;键盘&#xff0c;调制解调器等 软件: (1) 程序:程序是计算机完成一项任务的指令的集合。 (2)数据是由程序使用或生…...

资讯类网站怎么做/如何进行搜索引擎的优化

集合遍历操作的三种方式 Iterator迭代器方式增强for循环普通for循环代码如下&#xff1a; public static void test3(){ArrayList list new ArrayList();list.add(123);list.add("AAAA");list.add("bb");list.add(new String("JavaEE"));list.a…...

怎么把网站排名排上去/网络营销代运营外包公司

【BZOJ1662】[Usaco2006 Nov]Round Numbers 圆环数 Description 正如你所知&#xff0c;奶牛们没有手指以至于不能玩“石头剪刀布”来任意地决定例如谁先挤奶的顺序。她们甚至也不能通过仍硬币的方式。 所以她们通过"round number"竞赛的方式。第一头牛选取一个整数&…...