多线程的优点和缺点?什么场景适合使用多线程?

2023-05-16

由于多线程应用程序将程序划分成多个独立的任务,因此可以在以下方面显著提高性能:

(1)多线程技术使程序的响应速度更快,因为用户界面可以在进行其它工作的同时一直处于活动状态。

(2)当前空闲的任务可以将处理器时间让给其它任务。

(3)占用大量处理时间的任务可以定期将处理器时间让给其它任务。

(4)可以随时停止任务。

(5)可以分别设置各个任务的优先级以优化性能。

在以下情况,最适合采用多线程处理:

(1)耗时或大量占用处理器的任务阻塞用户界面操作

(2)各个任务必须等待外部资源(如远程文件传输或Internet连接)。

多线程的主要缺点包括:

(1)等候使用共享资源时造成程序的运行速度变慢。这些共享资源主要是独占性的资源,如打印机等。

(2)对线程进行管理要求额外的CPU开销。线程的使用会给系统带来上下文切换的额外负担。当这种负担超过一定程度时,多线程的特点就会主要表现在其缺点上,比如用多个线程来更新数组内每个元素。

(3)线程的死锁,即较长时间的等待或资源竞争以及死锁等多线程症状。

(4)对公有变量的同时读或写。当多个线程需要对公有变量进行写操作时,后一个线程往往会修改掉前一个线程存放的数据,从而使前一个线程的参数被修改;另外,当公用变量的读写操作是非原子性时,在不同的机器上,中断时间的不确定性,会导致数据在一个线程内的操作产生错误,从而产生莫名其妙的错误,而这种错误是程序员无法预知的。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

多线程的优点和缺点?什么场景适合使用多线程? 的相关文章

随机推荐

  • ROS消息sensor_msgs::Imu数据格式

    ubuntu下打开终端输入 rosmsg show sensor msgs Imu 查看sensor msgs Imu的数据格式 std msgs Header header uint32 seq time stamp 时间戳 string
  • slam优化eigen,ceres,g2o,gtsam,pcl

    eigen SLAM本质剖析 Eigen 古月居 ceres https guyuehome com 34633 g2o SLAM本质剖析 G2O 古月居 gtsam SLAM本质剖析 GTSAM 古月居 pcl https www guy
  • Android Cordova 正常安卓项目封装成插件的流程记录

    Android Cordova 正常安卓项目封装成插件的流程记录 背景 xff1a 混合式开发cordova使用Android原生插件 封装流程 xff1a 1 gradle的封装 xff1a a xff1a 需要在插件中先创建一个 gra
  • 错误提示 the operation is not applicable to the current selection.Select a field which is not declared a

    错误提示 the operation is not applicable to the current selection Select a field which is not declared as type variable or a
  • 无人机集群目标检测和追踪方法学习(一)MCDT方法

    论文 xff1a Deep neural network based cooperative visual tracking through multiple micro aerial vehicles 概要 xff1a 通过无人机集群 多
  • Docker ROS环境相关开发常用指令

    Docker ROS相关功能记录 1 主机网络代理配置1 1 Docker daemon Docker 守护进程 xff09 Http代理配置1 2 Container xff08 容器 xff09 Http代理配置1 3 Docker B
  • windows安装maven3.6.1教程

    目录 一 下载安装包 xff08 推荐第三种 xff09 二 安装maven 三 更改本地仓库地址 四 配置淘宝镜像 一 下载安装包 xff08 推荐第三种 xff09 1 官网下载 xff1a Maven Download Apache
  • 连载|决策树(下)

    决策树 xff08 下 xff09 在决策树 xff08 上 xff09 中我们了解了ID3和C4 5算法 xff0c 这两种算法都使用了较为复杂的熵来度量 xff0c 使用了复杂的多叉树 xff0c 并且只能处理分类问题 xff0c 针对
  • MAVEN添加SQL SERVER依赖

    maven添加SQL SERVER依赖 lt dependency gt lt groupId gt com microsoft sqlserver lt groupId gt lt artifactId gt mssql jdbc lt
  • 如何从0到1搭建一个个人网站

    前言 如何从0到1搭建一个可以外网访问的项目 xff1f 我就用自己的服务器给大家举例 xff0c 怎么从0到1搭建一个学生和新手可以用来面试的项目 xff0c 老手也可以回忆一下自己逝去的青春 服务器在激活的时候会让你选系统 xff0c
  • 如果再来一次,你还会选择互联网么?

    现在互联网的就业环境 xff0c 大家都在感受着一股寒意 也不知道从什么时候开始 xff0c 身边悲观的声音越来越多了 如果再给你一次机会 xff0c 你还会选择互联网吗 xff1f 回答这个问题之前 xff0c 我想跟大家聊聊一个我朋友的
  • 机器学习一决策树

    决策树 一 基本流程 xff1a 决策树 xff08 decision tree xff09 是一种常见的机器学习方法 xff0c 以二分类任务为例 xff0c 我们希望从给定的训练数据集学得一个模型用于对未知样本进行分类 xff0c xf
  • Jetson AGX xavier 搭建ORB_SLAM3(ubuntu18)

    Jetson AGX xavier 搭建ORB SLAM3 ubuntu18 ORB SLAM3 Github https github com UZ SLAMLab ORB SLAM3 1 安装依赖 sudo apt get instal
  • PX4 GPS笔记

    20180509 xff1a orb publish auto ORB ID vehicle gps position amp report gps pos pub amp report gps pos amp gps orb instan
  • 使用github构建自己的博客

    背景 xff1a 某天偶然下看到同事的博客 xff0c 顿时被吸引了 xff0c 突然很想有一个自己的酷炫的博客 xff0c 就是那种光是背景就能玩一天的博客 xff08 好吧 xff0c 就是觉得好看 xff09 刚好昨天项目上线了 xf
  • 学习笔记(1):自己动手从0到1写嵌入式操作系统-C2.02 任务切换的实现

    立即学习 https edu csdn net course play 4605 82626 utm source 61 blogtoedu 解决了栈冲突的问题 为每个任务独立分配栈 在发生异常的时候 xff1a CPU会自动保存 xPSR
  • CLion 控制台输出中文乱码的解决方法

    照着这篇中的做即可 xff0c 亲测有效 xff1a CLion 控制台输出中文乱码 简书
  • Apollo 自动驾驶工程 x86迁移到ARM ORIN

    概述 最近工作主要关于自动驾驶工程跨平台迁移 xff0c 从原来的X86架构工控机形式迁移到英伟达Orin Soc xff0c 由于Orin是ARM以及这个嵌入式平台的内核是定制的 xff0c 所以遇到了很多问题 xff0c 这里分享出来
  • 在CentOS上安装 Docker

    官方网站安装教程 https docs docker com engine install centos sudo docker 是以管理员模式运行 卸载旧版本 sudo yum remove docker docker client do
  • 多线程的优点和缺点?什么场景适合使用多线程?

    由于多线程应用程序将程序划分成多个独立的任务 xff0c 因此可以在以下方面显著提高性能 xff1a 1 多线程技术使程序的响应速度更快 xff0c 因为用户界面可以在进行其它工作的同时一直处于活动状态 2 当前空闲的任务可以将处理器时间让