java – 计算可用于在Threadpool中获得更好性能的最大线程数

前端之家收集整理的这篇文章主要介绍了java – 计算可用于在Threadpool中获得更好性能的最大线程数前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
最近我面临一个采访,面试官问我什么是你可以分配给线程池的最大线程.我回答他这将取决于硬件组合.
我也可以通过增加线程池中的线程来手动测试执行.

他似乎对此并不满意.

任何人都可以告诉我们如何决定我们应该使用哪些最大线程以获得更好的性能.任何指南链接将不胜感激(在核心Java应用程序中)

解决方法

任何人都可以告诉我们如何决定我们应该使用哪些最大线程以获得更好的性能 – 它绝对不是最大线程数量.

为获得最佳性能,线程数量应等于处理器核心数量(不要忘记使用-XmsYYYYM和-XmxYYYYM,如果没有它们,您可能会遇到处理器未将线程分配给核心的情况).

关于最大线程你的答案是正确的,这取决于硬件和操作系统.
在linux上可以检查:

cat /proc/sys/kernel/threads-max

编辑.

您可以使用Integer.MAX_VALUE创建线程池

但是你限制了最大线程使用量.
在我的笔记本上.命令“cat / proc / sys / kernel / threads-max”显示我126987.

我跑的代码

package com.stackoverflow.test;

import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

public class TestMaxAmountOfThreads {
  public static void main(String[] args) {
    ExecutorService serivce = Executors.newFixedThreadPool(Integer.MAX_VALUE);
    for (int i = 0; i < Integer.MAX_VALUE; i++) {
      serivce.submit(new Runnable() {
        public void run() {
          try {
            Thread.sleep(Integer.MAX_VALUE);
          } catch (InterruptedException e) {
          }
        }
      });
      System.out.println(i);
    }
  }
}

输出

31850

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:714) at
java.util.concurrent.ThreadPoolExecutor.addWorker(ThreadPoolExecutor.java:949)
at
java.util.concurrent.ThreadPoolExecutor.execute(ThreadPoolExecutor.java:1360)
at
java.util.concurrent.AbstractExecutorService.submit(AbstractExecutorService.java:110)
at
com.stackoverflow.test.TestMaxAmountOfThreads.main(TestMaxAmountOfThreads.java:10)

所以我只能使用31850个线程,没有jvm调优.

原文链接:https://www.f2er.com/java/129607.html

猜你在找的Java相关文章