我们为何要使用多线程,它有什么优点?

其实在平时的开发中,很多程序员都不会去写线程,为啥?因为麻烦,其次是用到的地方并不多,除非逼不得已,大家都不会去写,毕竟写一天代码,拿一天工资,是吧?

麻烦归麻烦,但是多线程的优点不得不说:

1. 资源利用率提升,程序处理效率提高

  打个比方:我们做上传图片的时候,在上传成功后往往会进行图片的处理,原图保存后,会再生成一张小图以作为一些应用的预览图,那么原图的处理就需要程序去读取再处理,假设读取需要花费1秒,处理需要2秒,现在有3张大图,所需要耗费的时间就是(1+2)X3=9秒,根据图片的不同,那么单位时间会更多,总计时间就会更久。

那么如果把程序设计更好的话,那就是在读取文件的时候同时处理上一个文件,这样就可以尽可能的缩短时间,减少客户端的响应,同时也提升了CPU的使用率。

如果还不能理解的话那就再举个例子,我朋友公司是专为某银行处理数据同步的问题,每天凌晨银行那边会有几十万条数据发送过来进行处理,项目本身就是个坑,几百万条数据接收后直接去处理了,每次运行大多都要耗费2.5个小时,时间实在太久,如果哪天有几亿数据是不是要跑几十个小时了?那么就可以用多线程,切割这个数据,利用不同的线程来处理,最后把时间缩短到了半小时左右

 

2. 代码会相对简单

  如果利用单线程去处理文件,那么我们就得标记每次处理的各个节点的状态;而如果使用多线程的话处理完一个扔一个,可以简便不少

 

3. 软件运行速度提升

  就像之前所说的魔兽争霸那样,如果采矿伐木打猎都是由一个农民工来做的话,那他会累死,而如果分配3个农民工来做的话,那么时间大大缩短;同理,软件程序在处理文件的时候也是一个道理。

也就是说,往常我们监听的是用户请求,现在我们把用户请求塞给线程,我们去监听线程就可以了。

举一个不恰当的例子,我们在用eclipse的时候经常会出现这样的情况,一个progress被另一个卡住,下一个必须等待上一个执行完毕后再执行,完毕后我们方可编写代码,这种情况尤其出现在maven编译或者下载jar包的时候。

假如说,eclipse是同时进行任务处理的,那么每个任务处理完后响应一个状态,然后再提示给用户,可以弹出显示,或者在底部状态来加个有颜色的提醒,都可以。(如果理解成消息队列的处理方式也可以,在云计算业务中利用消息队列处理各种服务器请求也是类似道理)

那么,这样的程序设计对于软件自身来说响应速度就更快了,用户的体验也就更高了~

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/396897.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ecs服务器数据迁移_如何非常方便地从Windows文件服务器把数据完整地迁移到ONTAP Select...

这是一个续篇,如果你依然爱你的Windows文件服务器或者使用Windows文件服务没有任何问题的话,请忽略我。续自:从Windows文件服务器,到ONTAP Select软件定义存储感谢联想凌拓合作伙伴新锐英诚的帮助,我们成功地做到了从海…

yum第三方安装-软件包没签名及更新错误

yum安装时 后面加 --nogpgcheck 阿里云源文件:http://mirrors.aliyun.com/repo/Centos-7.repo epel repo源:http://mirrors.aliyun.com/repo/epel-7.repo yum update 错误提示 Error: initscripts conflicts with centos-release-7-4.1708.el7.centos.x8…

oracle触发和存储过程,Oracle存储过程与触发器

Oracle存储过程与触发器存储过程存储过程最直接的理解:就是保存了批量的sql(select,insert,if for),以后可以通过一个名字把这些批量的sql执行,使用存储过程在大批量数据查询或计算时会带来高性能,存储过程编写和调试比较复杂&…

(hdu 简单题 128道)平方和与立方和(求一个区间的立方和和平方和)

题目:平方和与立方和Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 108212 Accepted Submission(s): 34915Problem Description给定一段连续的整数。求出他们中全部偶数的平方和以及全部奇数的立方…

企业高可用切换的说明

企业的应用场景,基本上都离不开高可用,不管是windows下自带的集群软件,或者是Linux下的heartbeat,keepalived等,AIX下的hacmp等。-----------------------------引用老男孩老师对高可用切换的说明--------------------…

swift int转string_Swift集合类型协议浅析(下)

关注【搜狐技术产品】公众号,第一时间获取技术干货导读本篇是Swift集合类型协议浅析系列文章的下篇,在这篇文章中,我们将继续围绕集合类型协议展开讨论,侧重点更多地关注于String相关的周边协议。StringProtocol代表一个字符串&am…

50 jQuery绑定事件 阻止默认事件发生 内置动画 each data

主要内容 1 阻止后续事件继续执行 return false: 常用于表单提交 event.preventDefault : 阻止默认事件发生 <body> <form action""><input type"text" id"t1"><input type"submit" class"s1" id&qu…

oracle视图执行脚本,Sh脚本中查询Oracle v$视图时需要在$号前加转义符“\”

DBA经常会部署一些sh脚本登陆Oracle数据库查询v$动态视图得到一些东西来实际管理自动化的目的&#xff0c;但在sh脚本中写ORACLE SQL语句时&#xff0c;如果语句查询v$视图&#xff0c;直接写v$XXXX是不能成功的&#xff0c;shell会将$当成一个参数来处理。以下面一段简单的sh脚…

Linux下实现视频读取(二)---camera參数设定

Camera的可设置项极多&#xff0c;V4L2 支持了不少。但Sam之前对这些设置的使用方法和涵义都是在看videodev2.h中边看边理解。感觉很生涩。直到写这篇blog时&#xff0c;才发现v4l2有专门的SPEC来说明&#xff1a; http://www.linuxtv.org/downloads/legacy/video4linux/API/V4…

微信小程序页面跳转与返回并回传数据

2019独角兽企业重金招聘Python工程师标准>>> A页面&#xff1a; .wxml文件 <view class"flex-wrp"><text style"width: 32%;">选择城市</text><input style"width: 68%;" type"text" bindtap"ci…

地址栏 输入 参数 刷新参数丢失_小米11 Pro屏幕参数曝光:2K屏幕+120Hz刷新率

本周一&#xff0c;高通已经宣布将于12月初举行的骁龙技术峰会上正式发布新一代旗舰处理器——骁龙875。根据此前的曝光消息&#xff0c;小米11系列将首发搭载这颗芯片&#xff0c;网上也已经开始对这款新机进行曝光。日前&#xff0c;海外知名论坛XDA在MIUI 12的代码中发现了一…

Cypress EZ-USB FX3 DMA模式下的串口通讯

由于公司设备升级后出了问题&#xff0c;需要对USB驱动进行修改&#xff0c;原本使用的是寄存器模式进行UART传输&#xff0c;但是由于FX3寄存器模式会出现长时间延时等待的问题&#xff0c;不得不对其传输模式进行修改。虽然赛普拉斯的EZ-USB FX3系列芯片功能强大&#xff0c;…

php如何写一个能让外部访问的接口,如何写一个接口供外界访问

在工作的时候经常调用别人的接口&#xff0c;获取数据&#xff0c;然后就想知道这中间的原理是什么呢&#xff1f;今天上一个自己写的一个测试例子&#xff1a;首先是自己远程写好的一个接口&#xff1a;public function testming(){$arrarray(first > 1,hospitalname > …

win10远程桌面连接

有的情况下&#xff0c;Win10设置了允许远程桌面连接后&#xff0c;远程主机仍然不能桌面连接到目标主机上&#xff0c;这时可以在目标主机上尝试如下修改&#xff1a; 开始-->运行->gpedit.msc->计算机配置->Windows设置->安全设置->本地策略->安全选项-…

10494,没过,待解决,大数除法

10494,没过,待解决,大数除法 import java.io.*; import java.util.*;public class Main {public static void main(String[] args) throws FileNotFoundException{// Scanner scanner new Scanner(new File("d://1.txt"));Scanner scanner new Scanner(System.in);…

springboot md5加密_实在!基于Springboot和WebScoket,写了一个在线聊天小程序

基于Springboot和WebScoket写的一个在线聊天小程序(好几天没有写东西了&#xff0c;也没有去练手了&#xff0c;就看了看这个。。。)项目说明此项目为一个聊天的小demo&#xff0c;采用springbootwebsocketvue开发。其中有一个接口为添加好友接口&#xff0c;添加好友会判断是否…

suse 启动oracle11g,SuSe10下Oracle11g文件系统模式安装及配置、网络配置与连接

SuSe10下Oracle11g文件系统模式安装及配置、网络配置与连接概述本课程主要讲解oracle数据库软件的安装及配置&#xff0c;以及数据库的创建过程和网络配置与连接等&#xff1b;同时讲解一些数据库安装过程中的常见问题解决办法。注意&#xff1a;本文当中引用的package_name均为…

Python pyenv

一、简介 一般在操作系统中我们会安装多个Python版本&#xff0c;所以在进行Python版本切换时会比较麻烦&#xff0c;pyenv就提供了一种简单的方式&#xff0c;能简易地在多个Python版本中进行切换的工具&#xff0c;它简单而优雅。pyenv有以下功能&#xff1a; 1&#xff09;进…

python中add_Python add()函数是如何使用呢?

Python里经常会出现一些不太常见的函数&#xff0c;大家在遇到这类函数时候&#xff0c;是怎么做的呢&#xff1f;没有概念&#xff0c;直接过&#xff0c;还是会去查询下呢&#xff1f;相信大部分人都不会去查询&#xff0c;因为查询的内容太复杂了&#xff0c;所以&#xff0…

JavaScript的DOM编程总结

DOM&#xff08;文档对象模型&#xff09;, 与语言无关, 用于操作XML&#xff08;在Web中&#xff09;和HTML&#xff08;在浏览器在&#xff09;文档的应用程序接口。访问DOM次数越多, 速度越慢, 费用也就越高。 最小化DOM访问次数&#xff0c;尽可能在JavaScript端处理。 如果…