首页 > 解决方案 > 如何为数据库批处理作业选择线程数

问题描述

我创建了一个批处理作业来从 Oracle 数据库中提取记录。它正在从 JDBC 读取记录并写入文件。

但是,处理太慢了,我想增加编号。线程来执行并行处理。

我创建了一个队列来存放要处理的记录 ID。我将触发多个线程同时处理记录。

根据记录总数/线程数,以及每条记录的处理时间,我将能够计算出处理所有记录所需的时间。

但是,如何确定可以分配的线程数?我相信这是基于CPU内核的数量。我的服务器上有 8 个 CPU 内核。

标签: javamultithreading

解决方案


Brian Goetz 在 中提供了一个方程<Concurrency in Practice>

Nthreads = Ncpu * Ucpu * (1 + W/C)

  • Nthreads 是理想的线程数;
  • Ncpu = CPU 数量;
  • Ucpu = 目标 CPU 利用率,0 <= Ucpu <= 1;
  • W/C = 等待时间与计算时间的比率。

推荐阅读