java - 如何为数据库批处理作业选择线程数
问题描述
我创建了一个批处理作业来从 Oracle 数据库中提取记录。它正在从 JDBC 读取记录并写入文件。
但是,处理太慢了,我想增加编号。线程来执行并行处理。
我创建了一个队列来存放要处理的记录 ID。我将触发多个线程同时处理记录。
根据记录总数/线程数,以及每条记录的处理时间,我将能够计算出处理所有记录所需的时间。
但是,如何确定可以分配的线程数?我相信这是基于CPU内核的数量。我的服务器上有 8 个 CPU 内核。
解决方案
Brian Goetz 在 中提供了一个方程<Concurrency in Practice>
:
Nthreads = Ncpu * Ucpu * (1 + W/C)
- Nthreads 是理想的线程数;
- Ncpu = CPU 数量;
- Ucpu = 目标 CPU 利用率,0 <= Ucpu <= 1;
- W/C = 等待时间与计算时间的比率。
推荐阅读
- python - 在 python 中有“期望一个缩进块”
- javascript - 删除reactjs中的重复项后如何从状态值和setstate创建数组
- python - 如何使用烧瓶登录处理角色
- google-cloud-firestore - 2FA 的 Firestore 安全规则
- gitahead - GitAhead - 你能在提交时添加一个“修改”复选框吗?
- javascript - 在 Signalr Core 中调用 Ajax 函数
- swift - 如何在 Swift 字典中找到前 3 个最大值?
- reactjs - Google Firebase Auth 在 Netlify 上失败,但在本地服务器上工作
- c++ - 为什么我的应用在 sudo 模式下更加丰富多彩?
- android - Android MLKit 仅在屏幕中心扫描二维码