gpt4 book ai didi

java - 计算线程池中可用于提高性能的最大线程数

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:27:34 24 4
gpt4 key购买 nike

最近我接受了一次面试,面试官问我可以分配给线程池的最大线程数是多少。我回答他这将取决于硬件组合。我也可以通过增加线程池中的线程来手动测试执行。

他似乎对此并不满意。

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

最佳答案

谁能告诉我们如何决定我们应该使用多少线程以获得更好的性能 - 这绝对不是最大线程数。

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

关于最大线程,您的回答是正确的,这取决于硬件和操作系统。在 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 调优。

关于java - 计算线程池中可用于提高性能的最大线程数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27225265/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com