public class ThreadPoolSelfDefinition2Test {
private static final ExecutorService threadPool = new ThreadPoolExecutor(
20,
200,
0L,
TimeUnit.MILLISECONDS,
new LinkedBlockingQueue<>(2000),
new ThreadFactoryBuilder().setNameFormat("demo-pool-%d").build(),
(runnable, threadPoolExecutor) -> System.out.println("runnable:" + runnable.toString() + ",threadPoolExecutor:" + threadPoolExecutor.toString())
);
public static void main(String[] args) {
//200 qps 执行 100s;
for (int j = 0; j++ < 100; ) {
for (int i = 0; i++ < 200; ) {
threadPool.execute(() -> runBizLogic());
}
try {
int threadCount = ((ThreadPoolExecutor) threadPool).getActiveCount();
System.out.println("--------第:" + j + "s, --------当前活跃的线程数:" + threadCount);
TimeUnit.MILLISECONDS.sleep(1000L);
} catch (InterruptedException e) {
}
}
threadPool.shutdown();
}
//每个任务响应时间约100ms
private static void runBizLogic() {
try {
TimeUnit.MILLISECONDS.sleep(100L);
} catch (InterruptedException e) {
}
System.out.println(Thread.currentThread().getName() + ":runBizLogic");
}
}
qps 3000
每个任务响应时间9999 100ms内, (可计算tps 30000)
线程池设计:
每个线程1s可以处理10个任务,至少需要300个线程
队列保持10s的堆积能力,10s*3000qps = 30000
服务器部署10台:
则每台机器需要至少30个线程,对列长度3000;
qps 1000
每个任务响应时间9999 500ms内, (可计算tps 2000)
线程池设计:
每个线程1s可以处理2个任务,至少需要500个线程
队列保持10s的堆积能力,10s*1000qps = 10000
服务器部署10台:
则每台机器需要至少50个线程,对列长度1000;
qps 200
每个任务响应时间9999 100ms内, (可计算tps 2000)
线程池设计:
每个线程1s可以处理10个任务,至少需要20个线程
队列保持10s的堆积能力,10s*200qps = 2000
服务器部署1台:
则每台机器需要至少20个线程,对列长度2000;