java多线程-3-使用多线程的时机
许多人对于计算机的运行原理不了解,甚至根本不了解。
不幸的是,此类中的一部分人也参与了计算机的编码工作。可想而知,编写的效率和结果。听者伤心,闻者流泪。
此类同学的常见的误解:
- 并发就能加快任务完成
- 任务的总完成时间大约=单线程理论完成时间/线程个数
实际情况,和误解不同。
为何,主要因为以下几个因素:
1.计算机的配置
2.管理成本
3.任务性质
配置
每台计算器的配置都是有限的。譬如cpu可能是intel i9,或者i7,差的可能是i5,甚至更糟糕;而磁盘可能是老式的5400转的机械硬盘,或者是更快的
SSD。
不同的配置,决定了计算机每秒所能完成的任务数(计算次数),如果超过了配置,那么它也是无法完成的。
譬如有cpu,一秒只能执行500个计算。有1000万个运算的任务,以10000个一组,分为1000组(线程),在一秒内就可以完成吗?显然不是。
管理成本
操作系统创建线程,是需要耗费资源:存储空间。这些空间用于存储线程/进程信息。另外调度本身也是需要耗费时间的。
管理所耗费的时间,无形中也会减少可以实际用于计算的时间。
当然,在cpu足够强大,且线程不是很多的时候,可能不是一个大问题。
任务性质
不是什么任务都适合并发执行的。
譬如一个任务主要进行I/O,那么力图通过不合理的并发来提升效率是不可行。
又譬如力图从一个很慢的网站快速下载资源是很困难的,无论你增加了多少线程。
所以,在决定是否使用多任务之前,一定要仔细考虑该任务是否允许在特定的环境下使用。
如果不允许,还是老老实实地单发,或者把并发度设置为1。
只可惜,有许多初级程序员,或者一些没有啥理论的程序员不知道这些道理。
java多线程-3-使用多线程的时机的更多相关文章
- (原创)JAVA多线程一传统多线程
一,多线程 多线程是提高程序效率,避免资源浪费的很好的解决方案,下面来慢慢的介绍多线程的一些基本知识,而这些是晋级高级不可或缺的一部分 1,Thread类 类实现多线程需要实现Runnable接口,我 ...
- Java学习手记2——多线程
一.线程的概念 CPU执行程序,就好比一个人在干事情一样,同一个时间你只能做一件事情,但是这样的效率实在是太低了,在你用电脑的时候,听歌就不能浏览网页,看电影就不能下载视频,你想想是不是很蛋疼. 所以 ...
- java 并发性和多线程 -- 读感 (一 线程的基本概念部分)
1.目录略览 线程的基本概念:介绍线程的优点,代价,并发编程的模型.如何创建运行java 线程. 线程间通讯的机制:竞态条件与临界区,线程安全和共享资源与不可变性.java内存模型 ...
- Java 并发性和多线程
一.介绍 在过去单 CPU 时代,单任务在一个时间点只能执行单一程序.之后发展到多任务阶段,计算机能在同一时间点并行执行多任务或多进程.虽然并不是真正意义上的“同一时间点”,而是多个任务或进程共享一个 ...
- Java 并发和多线程(一) Java并发性和多线程介绍[转]
作者:Jakob Jenkov 译者:Simon-SZ 校对:方腾飞 http://tutorials.jenkov.com/java-concurrency/index.html 在过去单CPU时 ...
- Java核心知识点学习----多线程中的阻塞队列,ArrayBlockingQueue介绍
1.什么是阻塞队列? 所谓队列,遵循的是先进先出原则(FIFO),阻塞队列,即是数据共享时,A在写数据时,B想读同一数据,那么就将发生阻塞了. 看一下线程的四种状态,首先是新创建一个线程,然后,通过s ...
- Java并发性和多线程
Java并发性和多线程介绍 java并发性和多线程介绍: 单个程序内运行多个线程,多任务并发运行 多线程优点: 高效运行,多组件并行.读->操作->写: 程序设计的简单性,遇到多问题, ...
- Java并发性和多线程介绍
java并发性和多线程介绍: 单个程序内运行多个线程,多任务并发运行 多线程优点: 高效运行,多组件并行.读->操作->写: 程序设计的简单性,遇到多问题,多开线程就好: 快速响应,异步式 ...
- 带着新人看java虚拟机04(多线程篇)
我记得最开始接触多进程,多线程这一块的时候我不是怎么理解,为什么要有多线程啊?多线程到底是个什么鬼啊?我一个程序好好的就可以运行为什么要用到多线程啊?反正我是十分费解,即使过了很长时间我还是不是很懂, ...
- 在java中怎样实现多线程?线程的4种状态
一.在java中怎样实现多线程? extends Thread implement Runnable 方法一:继承 Thread 类,覆盖方法 run(),我们在创建的 Thread 类的子类中重写 ...
随机推荐
- 🎊这个 OpenTiny 开源项目的 CLI 可太牛了,两行命令创建一个美观大气的 Vue Admin 后台管理系统,有手就会,连我的设计师朋友都学会啦啦
大家好,我是 Kagol,OpenTiny 开源社区运营,TinyVue 跨端.跨框架组件库核心贡献者,专注于前端组件库建设和开源社区运营. 近期尝试了下 OpenTiny 的 CLI 工具,不得不说 ...
- dotnet OpenXML 读取 PPT 主序列进入退出强调动画
本文告诉大家如何读取 PPT 文件里面,放在主动画序列 MainSequence 的进入和退出和强调的动画,和在 OpenXML 里面的存放方式 如以下的课件内容,给一个元素添加了进入强调退出的动画, ...
- aspnetcore两种上传图片(文件)的方式
aspnetcore上传图片也就是上传文件有两种方式,一种是通过form-data,一种是binary. 先介绍第一种form-data: 该方式需要显示指定一个IFormFile类型,该组件会动态通 ...
- 006_Orcad创建Hetergeneous分裂元件
006_Orcad创建Hetergeneous分裂元件 以169脚的EMMC为例: 分为两部分,用到的引脚和NC的引脚. 先画一个框,依据引脚功能添加引脚.A部分做好,做B部分.引脚多,可以用pin ...
- ruby后台传变量到前端的JS里
后端变量 @namelist 前端解释 var result_json = <%= @namelist.to_json.html_safe %>
- LocalDateTime 时间偏移量的处理
一.代码处理块 // 当前系统时间两年后的时间 LocalDateTime expirationTime = LocalDateTimeUtil.offset(LocalDateTime.now(), ...
- istio sidecar 工作方式
istio 是什么 Istio 是一个开放源代码的服务网格,它为基于微服务的应用程序提供了一种统一的方式来连接.保护.监控和管理服务.Istio 主要解决的是在微服务架构中的服务间通信的复杂性问题,它 ...
- The attempt was made from the following location: com.ruoyi.framework.config.ResourcesConfig.corsFilter(ResourcesConfig.java:57)
报错信息: 8:42:12.529 [restartedMain] ERROR o.s.b.w.e.t.TomcatStarter - [onStartup,61] - Error starting ...
- 用 C 语言开发一门编程语言 — 字符串与文件加载
目录 文章目录 目录 前文列表 字符串 读取字符串 注释 文件加载函数 命令行参数 打印函数 报错函数 源代码 前文列表 <用 C 语言开发一门编程语言 - 交互式解析器> <用 C ...
- docker 修改运行容器环境变量,如何修改容器中的环境变量env使长期有效
@ 目录 前言 第一步:查看Docker Root目录 第二步:查到容器的长id(container id) 第三步:停止容器 第四步:编辑修改环境变量env 第五步:重载服务的配置文件 第六步:重启 ...