use*_*592 6 java performance multithreading scala
嗨:我有一个多线程Java应用程序.目前的线程大小已经是100.我们目前正在使用4核CPU.但正如人们在不久的将来看到的那样,CPU内核将增加一倍,甚至达到32个内核.为了充分利用核心,我们需要增加线程池大小.但是你可能知道(也许我错了),当有100个线程时Java很好,但是当线程是200,500,1000个线程时可能存在性能问题.然后我们应该使用其他编程语言,例如scala.我的担心合理吗?
NPE*_*NPE 10
使用现代JVM,Java进程可以创建与操作系统允许的一样多的线程.您的应用程序是否能够充分利用这些线程取决于您的应用程序的设计.
如果可扩展性是一个问题,我建议您首先关注应用程序的体系结构(数据结构,同步等).无论编程语言如何,都需要考虑这些问题,并且Java没有任何内容使其本身不适合大量多线程应用程序.
如果您有 4 个核心,则最佳线程池大小可能是 4,因为这是保持所有 CPU 繁忙所需的最小线程数。但是,您可以拥有任意数量的空闲/等待线程,最多可达 10K 左右。这是 JVM 线程库的临界点,因此切换到 Scala 不会产生任何影响。注意:你可以有更多的线程,我不推荐它。
如果您有 10K 线程并且想要更多,我建议您购买另一台服务器。您可以花费大约 1000 美元购买很多服务器。
我在 Ubuntu 11 上使用 Java 6 update 26、32 位和 64 位进行了测试,在我的机器上创建了大量线程。创建前 1000 个线程需要 72 毫秒,从 31K 到 32K 需要 3,861 毫秒创建。在大约 32K 线程时我收到此错误
Exception in thread "main" java.lang.OutOfMemoryError: unable to create new native thread
at java.lang.Thread.start0(Native Method)
at java.lang.Thread.start(Thread.java:640)
Run Code Online (Sandbox Code Playgroud)