我没有几个问题,我在网上搜索了下面的问题,但更困惑了。
从以上第1点和第2点来看,哪一点更好,为什么
在以上1和2点中,假设每个线程需要10 In才能完成任务,那么在第1和第2种情况下,所有任务将在多长时间内完成。请解释。
我已经搜索并听说了CPU密集型和I/O密集型应用程序在CPU利用率方面的情况。你能解释一下吗,因为我在网上弄糊涂了。
通常,建议的线程数等于核数。如果我有更多的线程,然后核心,那么会有什么影响。请解释一下。
发布于 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个线程)。
https://stackoverflow.com/questions/44380135
复制相似问题