进程比线程更多资源_为什么我们不应该使用比我们需要更多的线程

进程比线程更多资源

总览

有一个普遍的论点,因为我们有很多核心,并且将来还会有更多核心,所以我们必须使用它们。 我们只是需要找到使用它们的最佳方法,而仅仅是因为我们不能意味着我们应该这样做。

我们的目标是什么?

使用多个线程的充分理由是

  • 使用一个线程的性能还不够。
  • 您已对应用程序进行了概要分析,以确保不会有低落的果实。
  • 多线程可提高吞吐量,延迟或一致性。
此时,当您知道它使您更接近目标时,应该添加一个线程。

使用多个线程的不好理由

仅仅因为我们可以使用更多的线程并不意味着我们应该这样做。 多线程
  • 增加代码的复杂性
  • 还有其他就是要加快应用程序。 L1缓存比L3缓存快10到20倍,如果您可以通过优化内存使用和访问来在L1缓存中花费更多的时间,则与使用插槽中的每个CPU相比,您可以获得更高的性能。
  • 多线程可能会引入细微的,鲜为人知的错误,而单线程代码根本不会出现这些错误。
  • 多线程增加了同步,更多地使用了不可变对象,而不是回收可变对象。
  • 即使典型性能更好,多线程也往往导致更差的抖动和更糟的性能。

简而言之,除非有人考虑,否则多线程更有可能使程序变慢而不是加速。 两个CPU的速度最多可以快一倍,但如果不小心的话,很容易变慢十倍。 也就是说,您损失的比获得的更多。

一个简单的例子是计算斐波纳契数。 这些很容易递归地描述并创建许多线程。 因此,斐波那契数的计算通常用作如何使用大量线程的示例。 他们经常没有提到的是,您创建的线程数等于答案,即它呈指数增长。 这意味着,虽然在一个循环/线程中进行迭代大约需要4毫秒来计算fib(69),但多线程版本将创建数万亿个线程,并且如果不崩溃,其花费的时间将比宇宙的寿命还要长。

但是,如果我有空闲的CPU,那是在浪费它们。

如果要使用每个CPU,只需为每个CPU编写一个繁忙的等待线程即可,完成后,每个CPU的使用率都是100%

假设您要从A到B行驶,有时您可以走一条街,有时走四条街会更快。 但是在A和B附近有20条街道,您应该沿着所有20条街道上下走,因为否则它们就没有意义了,对!!

结论

如果您专注于系统工程设计,以便于开发和维护,那么您将需要最简单的解决方案来解决您的问题。 如果那意味着您不使用100%的网络带宽,100%的磁盘空间,100%的内存或100%的CPU,那也许是一件好事。

参考: 为什么我们不应该使用比我们的JCG合作伙伴 Peter Lawrey在Vanilla Java博客上更多的线程 。

翻译自: https://www.javacodegeeks.com/2013/11/why-we-shouldnt-use-more-threads-than-we-need-to.html

进程比线程更多资源

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

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

相关文章

ajax默认什么方法,ajax设置默认值ajaxSetup()方法

$(function(){//设置全局 jQuery Ajax全局参数$.ajaxSetup({type:"POST",async:false,cache:false,dataType:"JSON",error:function(jqXHR,textStatus,errorThrown){switch(jqXHR.status){case(500):alert(服务器系统内部错误);break;case(401):alert(未登…

Java谓词的延迟执行

在先前的文章“ 用Java的供应商延迟执行 ”和“ Java的消费者延迟执行 “,我看着很容易地通过推迟标准Java API接受,分别在Java执行供应商 S和消费者秒。 在本文中,我将对标准JDK提供的API如何通过标准功能接口Predicate允许延迟执行进行类似…

android实现评论列表_【Android视图效果】分组列表实现吸顶效果

效果图效果图分析先来分析一下,可以看到这是一个按月份分组的2行图片列表,列表顶部一个悬浮栏,会随着列表滑动而刷新,点击顶部栏,弹出了一个筛选框。思路1.列表部分可以用RecyclerViewGridLayoutManager,月…

用ajax写无限循环,ajax无限循环

// 猜你喜欢的无限加载(function(){var content document.getElementsByClassName("content")[0];var footer document.getElementsByTagName("footer")[0];var winh window.innerHeight - footer.offsetHeight;var ul document.getElementById("…

JDK 11:发行候选更新和OpenJDK JDK 11 LTS

JDK 11是预定被释放的一般可用性上周二,9月25日2018年2018年8月16日马克莱因霍尔德消息上OpenJDK的JDK-dev邮件列表宣布“ JDK 11现在在候选发布版阶段 。” 但是,Reinhold在2018年8月17日同一封邮件列表中的消息中提供了更新的详细信息,他在…

lr监控虚拟服务器,lr监控服务器 教程

lr监控服务器 教程 内容精选换一换本教程旨在演示使用GDS(General Data Service)工具将远端服务器上的数据导入GaussDB(DWS)中的办法,帮助您学习如何通过GDS进行数据导入的方法。在本教程中,您将:生成本教程需要使用的CSV格式的数据源文件。将…

mysql-5.5密码是多少_关于mysql-5.5数据库密码的设置和重置

一、mysql-5.5数据库的密码长什么样?直接打开给你看:[rootlnmp1 ~]# mysql -uroot -p#在已知密码的情况想打开数据库Enter password:Welcome to the MariaDB monitor. Commands end with ; or \g.Your MariaDB connection id is 4Server version: 5.5.64…

华为OD机试真题-停车场车辆统计-2023年OD统一考试(C卷)

题目描述: 特定大小的停车场,数组cars[]表示,其中1表示有车,0表示没车。车辆大小不一,小车占一个车位(长度1),货车占两个车位(长度2),卡车占三个车位(长度3),统计停车场最少可以停多少辆车,返回具体的数目。 输入描述: 整型字符串数组cars[],其中1表示有车,0…

vc mysql 图片_VC连接MySQL

一、MySQL的安装可以考虑安装mysql-5.0.41-win32(可到http://www.newhua.com/soft/3573.htm处下载),当然你有更新的版本更好,注意选择“完全安装”(只有这样才会安装VC编译时需要的头文件等)。安装后期会进行服务器配置,你可以设置你的服务器…

魔兽巨龙追猎者服务器微信群,魔兽世界:难怪现在“龙脊”价格低,掉落率提升,群里一天出几个...

祥子哥最近几天一直在练猎人号,目前已经67级了,再过两三天差不多就能满级了。知道祥子哥为什么练猎人吗?不全是因为猎人伤害高玩着爽,还有另一个原因,那就是“龙脊奖章”现在价格很便宜,祥子哥使把劲应该能…

mysql group原理_MySQL Group By 实现原理分析

【IT168 专稿】由于 GROUP BY 实际上也同样会进行排序操作,而且与 ORDER BY 相比,GROUP BY 主要只是多了排序之后的分组操作。当然,如果在分组的时候还使用了其他的一些聚合函数,那么还需要一些聚合函数的计算。所以,在…

使用AWS Lambda的CloudWatch事件通知

CloudWatchEvents的主要用例是跟踪整个AWS基础架构中的更改。 当前,它支持在Auto Scaling组,EC2,EBS和其他各种事件中发出的事件。 为了对这些事件进行有意义的处理,我们需要一种消耗它们的方法。 AWS使用术语“ targets来指代任何…

nodejs接收表单写入mysql_NodeJS提交表单存数据库(转)

姓名:性别:年龄:手机:$(#ok_btn).on(click,function(){var name $.trim($(#name).val()),sex $.trim($(#sex).val()),age $.trim($(#age).val()),tel $.trim($(#tel).val()),data {name : name,sex : sex,age : age,tel : te…

r语言 中断r的输入_R语言_004数据输入

现实的情况是,我们大部分遇到的都是表格数据,在R语言里面叫数据框,数据来源一般不可能我们自己在程序开始前手动录入,正常的逻辑是从外面读取现成的数据,再预处理、建模什么的。根据经验,现在的数据来源主要…

我的机器人现在无处可去。 无家可归。 无服务器。

我通常会关注各种网站-有关最新出版物,热门新优惠,限时游戏和竞赛等。 其中大多数不提供“干净”的通知系统,例如RSS feed。 因此,我经常不得不刮擦他们HTML才能达到我所需要的。 这意味着我经常需要运行一些自定义的字符串操作…

mysql怎么对比表结构_mysql查看表结构2种方式对比

C语言之带有返回值的函数带有返回值的函数 语法: 类型 函数名(参数列表){ 函数体; return 数据; } 例: int getSum(int num1,int num2){ int sum num1 num2 ...mysql 列转行,合并字段数据表: 列转行:利用max(case when then) max---聚合函数 取最大值 (case cours…

dubbo 消费者也要暴露端口吗_一文详细解读 Dubbo 中的 http 协议

(给ImportNew加星标,提高Java技能)转自:Kirito的技术分享,作者:kiritomoe太阳红彤彤,花儿五颜六色,各位读者朋友好,又来到了分享 Dubbo 知识点的时候了。说到 Dubbo 框架支持的协议,…

非一致性访存系统_Hibernate事实:访存策略的重要性

非一致性访存系统在使用ORM工具时,每个人都承认数据库设计和实体到表映射的重要性。 这些方面引起了很多关注,而诸如获取策略之类的事情可能只是推迟了。 我认为,不应将实体获取策略与实体映射设计分开,因为除非经过适当设计&…

应用新的JDK 11字符串方法

在“ 使用JDK 11的Java字符串上的新方法 ”和“ String#repeat即将加入Java? ”,我讨论了JDK 11引入Java String的六个新方法。 可用的早期访问JDK 11构建已经包含了这些新方法,在这篇文章中,我将使用其中的一种早期访…

mysql 传统数据恢复_mysql 数据恢复实例

基于二进制日志数据恢复mysql数据恢复演练实例如何按需截取日志基于position好的截取--start-position--stop-positionmysqlbinlog --start-position219 --stop-position1272 /data/binlog/mysql-bin.000002 >/tmp/back.sql恢复删除库 mysql> drop database oldboy1;mysq…