多线程的优缺点

2023-05-16

何时使用多线程技术,何时避免用它,是我们需要掌握的重要课题。多线程技术是一把双刃剑,在使用时需要充分考虑它的优缺点。
多线程处理可以同时运行多个线程。由于多线程应用程序将程序划分成多个独立的任务,因此可以在以下方面显著提高性能:
(1)多线程技术使程序的响应速度更快 ,因为用户界面可以在进行其它工作的同时一直处于活动状态;

(2)当前没有进行处理的任务时可以将处理器时间让给其它任务;

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

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

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

 是否需要创建多个线程取决于各种因素。在以下情况下,最适合采用多线程处理:
(1)耗时或大量占用处理器的任务阻塞用户界面操作;

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


同样的 ,多线程也存在许多缺点 ,在考虑多线程时需要进行充分的考虑。多线程的主要缺点包括:
(1)等候使用共享资源时造成程序的运行速度变慢。这些共享资源主要是独占性的资源 ,如打印机等。

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

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

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

转载于:https://www.cnblogs.com/lmjob/archive/2009/08/10/1542707.html

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

多线程的优缺点 的相关文章

  • No compiler is provided in this environment. Perhaps you are running on a JR

    maven编译项目时出错 xff0c 提示信息如下 xff1a ERROR Failed to execute goal org apache maven plugins maven compiler plugin 3 1 testComp
  • [Error] assignment to expression with array type

    int array1 61 1 2 3 int array2 int array3 3 array2 61 array1 copy pointer only array3 61 amp array1 error To elaborate f
  • docker使用阿里云镜像加速

    由于很多镜像是国外网站的 xff0c 我们下载的话会比较耗时 xff0c 但是国内有些企业做了镜像拷贝工作 xff0c 这样 xff0c 我们就可以直接从他们的国内服务器上下载相应的文件就好了 xff0c 比如阿里云的服务 登录阿里云 xf
  • hive (with as)

    背景 xff1a 当我们书写一些结构相对复杂的SQL语句时 xff0c 可能某个子查询在多个层级多个地方存在重复使用的情况 xff0c 这个时候我们可以使用 with as 语句将其独立出来 xff0c 极大提高SQL可读性 xff0c 简
  • mysql执行顺序

    SQL Select语句完整的执行顺序 xff1a 1 from子句组装来自不同数据源的数据 xff1b 2 where子句基于指定的条件对记录行进行筛选 xff1b 3 group by子句将数据划分为多个分组 xff1b 4 使用聚集函
  • mysql的左连接

    哇 xff0c mysql的左连接我又忘记了 xff0c 做个笔记 select from table1 a left join table2 b on a id 61 b id 这样就连接起来了 xff0c 棒棒的 转载于 https w
  • 大学生应该懂得。。。葡萄酒知识

    葡萄酒 xff08 p t o ji xff09 xff1a 根据国际葡萄酒组织的规定 xff0c 葡萄酒只能是破碎或未破碎的新鲜葡萄果实或汁完全或部分酒精发酵后获得的饮料 xff0c 其酒精度数不能低于8 5 葡萄酒是用新鲜的葡萄或葡萄汁
  • 系统整体测试工具

    LoadRunner xff0c 是一种预测系统行为和性能的负载测试工具 通过以模拟上千万用户实施并发负载及实时性能监测的方式来确认和查找问题 xff0c LoadRunner 能够对整个企业架构进行测试 转载于 https www cnb
  • 数据结构习题——第一章 绪论

    整理自己学习过程中接触的习题 xff0c 不断更新中 答案在每个部分后面 第一部分 xff1a 第一章 绪论 一 xff0e 选择题 1 xff0e 数据结构被形式地定义为 xff08 K xff0c R xff09 xff0c 其中K是
  • php利用数组循环输出,php数组遍历,php循环输出数组

    php数组遍历 php循环输出数组 PHP数组循环遍历的四种方式 重点 数组循环遍历的四种方式 1 xff0c https www cnblogs com waj6511988 p 6927208 html 2 xff0c https ww
  • 产品开发阶段 EVT DVT PVT MP

    PLM xff08 Product Lifecycle Management xff09 System xff1a PLM是协助产品能够顺利完成在新产品开发 xff08 NPI xff1a New Product Introduction
  • 美图秀秀一寸照片的制作

    在浏览器里搜索美图秀秀 xff0c 并点击下载 2 安装之后 xff0c 打开美图秀秀 xff0c 选择图片美化 3 选择打开一张图片 xff0c 添加需要修改的图片 4 此时图片添加完成 xff0c 点击左侧的尺寸修改 5 点击取消锁定高
  • 使用虚拟机Ubuntu进行深度学习(一) ----安装虚拟机和Ubuntu系统

    使用虚拟机Ubuntu进行深度学习 xff08 一 xff09 安装虚拟机和Ubuntu系统 很多想要开展深度学习的小伙伴们 xff0c 可能没有或者即将拥有服务器和GPU这些比较好的深度学习硬件设备 xff0c 但又想较早开始和接触深度学
  • 有关YOLO目标检测的FPGA加速教程(一)

    1 内存卡的装配 详见 xff1a https blog csdn net weixin 38438451 article details 83474479 在这一步 xff0c 开发板启动后 xff0c 可以通过超级终端HyperTerm
  • java开发app后端_app后端用什么开发

    选择开发语言就一个核心原则 xff1a 在合适的业务场景的情况下选择最热门的语言 1 每种语言都有自己擅长的业务场景 xff0c 根据业务场景来选择 推荐学习 xff1a PHP视频教程 例如 xff0c 如果需要开发一个聊天服务器 xff
  • Python sphinx-build在Windows系统中生成Html文档

    看到前同事发布的 Markdown reST 文档发布流水线 基于TFS Docker Azure等工具和平台进行文档发布的介绍说明 xff0c 不得不在心中暗暗竖起大拇指 这套模式 xff0c 实现了文档编写后版本管理 发布 存档 分享的
  • php打开sdf文件,sdf文件扩展名,sdf文件怎么打开?

    sdf 文件类型1 xff1a SQL Server Compact Database File 文件说明 xff1a Compact relational database developed by Microsoft also know
  • 如何将获取的html源码重新加载,js中页面的重新加载的方法

    摘要 腾兴网为您分享 js中页面的重新加载的方法 xff0c 信用管家 xff0c 新浪博客 xff0c 听中国 xff0c 实时地球等软件知识 xff0c 以及apexlauncher xff0c 乐园rpg xff0c 正版秒挂抢红包挂
  • Git命令行介绍和使用说明(持续更新)

    Git命令行介绍和使用说明 xff08 持续更新 xff09 Git 命令行介绍和使用说明 xff08 持续更新 xff09 文档名称 Git 命令行介绍和使用说明会 创建时间 2012 8 23 修改时间 2012 8 23 创建人 Ba
  • 【题解】Luogu P2233 [HNOI2002] 公交路线 矩乘加速递推

    构造矩阵 发现只能相邻两个车站转移 xff0c 所以能够写出下面这个矩阵 begin bmatrix 0 amp 1 amp 0 amp 0 amp 0 amp 0 amp 0 amp 1 1 amp 0 amp 1 amp 0 amp 0

随机推荐