首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >单/多核单机上的单/多JVM

单/多核单机上的单/多JVM
EN

Stack Overflow用户
提问于 2017-06-06 01:39:19
回答 1查看 976关注 0票数 0

我没有几个问题,我在网上搜索了下面的问题,但更困惑了。

  1. 我有java应用程序在单机上运行,只有单个JVM,有20 GB内存的核心机器,有20个java线程。(单机、单JVM、20核、20 GB ram、20个java线程)
  2. 我让java应用程序运行在具有20个JVM的单机上,20个内核machine具有1GB内存到每个JVM,每个进程有一个JAVA线程。(单机,20个JVM,20个内核,20个GB内存,20个java线程)

从以上第1点和第2点来看,哪一点更好,为什么

  • 应用性能
  • 机器CPU利用率
  • 如果CPU没有被完全消耗,甚至增加线程的数量,那么在应用程序或机器中应该做些什么来利用更多的CPU。
  • 在这种情况下,将更多地切换上下文。

在以上1和2点中,假设每个线程需要10 In才能完成任务,那么在第1和第2种情况下,所有任务将在多长时间内完成。请解释。

我已经搜索并听说了CPU密集型和I/O密集型应用程序在CPU利用率方面的情况。你能解释一下吗,因为我在网上弄糊涂了。

通常,建议的线程数等于核数。如果我有更多的线程,然后核心,那么会有什么影响。请解释一下。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-06-06 03:20:06

这里有很多不同的变量,不会有简单的答案。我将在下面添加一些细节,但是tl;dr版本将是“为您的场景运行一些测试,看看什么是最好的”。

每个cpu是否有一个线程取决于您的工作负载。正如您显然已经发现的那样,如果您的线程是cpu密集型的(也就是说,大多数时候它正在积极地使用cpu),那么一个线程将接近于充分利用一个cpu。然而,在许多现实世界中,您的线程可能需要做其他事情(比如等待I/O),在这种情况下,它将无法充分利用cpu (这意味着每个cpu可以运行多个线程)。

另外,在两个场景中,您需要考虑所有jvm开销。每个jvm都有许多自己的线程(最显著的是GC线程)。这将增加cpu使用的额外开销。如果您的代码大量使用垃圾收集器(在工作时创建/丢弃大量垃圾),那么每个线程单独使用jvm可能是有益的,但是您需要考虑额外的gc线程cpu使用情况。如果您的代码没有造成太多垃圾,那么使用单独的jvm(以及许多额外的gc线程)可能只是在浪费资源。

考虑到所有这些变量,以及线程的实际工作负载配置文件,您不太可能仅仅从理论上找到正确的答案。用真实世界的数据测试各种场景是为您的应用程序找到合适组合的唯一方法(它可能会出现在中间,比如4个jvm,每个线程都有5个线程)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44380135

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档