Просмотр исходного кода

docs(kb): 94 补 §1.3 -parallel 行为升级说明(fire-and-forget → wait-and-collect)

- 老 sh -parallel 是 & 后台 fire-and-forget,主脚本 rc 恒 0
- 新 Python threading + join,主进程等齐后汇总真实 rc = 失败数
- 并行度 / 多核利用完全等价(都 fork 独立 OS 进程跑 JVM)
- GIL 不是瓶颈(线程卡在 subprocess.wait(),GIL 释放)
- 原 §1.3 收益点概述 / §1.4 待讨论顺延为 §1.4 / §1.5

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
tianyu.chu 1 неделя назад
Родитель
Сommit
e3347ce9de
1 измененных файлов с 12 добавлено и 2 удалено
  1. 12 2
      kb/94-重构对比.md

+ 12 - 2
kb/94-重构对比.md

@@ -43,7 +43,17 @@
 
 **仍未做**:hdfs-kafka 特殊 writer 说明(老 sh `datax-single-job-starter.sh:232-245` 10 行 columnType/columnMapping 业务说明),本项目用 kafka 概率低,用到再补
 
-### 1.3 收益点概述
+### 1.3 行为升级说明
+
+**`-parallel` 语义变化**:老 sh `-parallel` 用 `&` 后台 fire-and-forget,主脚本启动完立即退出,rc 恒为 0(只计启动数,不等完成;查证老 `datax-multiple-job-starter.sh:232-252`);新 Python 用 `threading.Thread + join`(`dw_base/datax/batch.py:70-89`),等所有 ini 完成后汇总真实 rc(= 失败任务数)。
+
+- 实际并行度 / 多核利用**完全等价**:两者都 fork 独立 OS 进程跑 DataX JVM,OS 内核调度到不同 core
+- Python GIL **不影响**:线程 95% 时间卡在 `subprocess.wait()` 上,此时 GIL 释放;CPU 密集活全在 JVM 子进程里
+- 行为差异只在主进程退出时机:老立即退、新等齐
+- 更适合 DS 调度:DS 拿 rc=0 时作业确实全跑完;老行为下 DS 收到 rc=0 作业可能还在后台跑
+- 老的"非 release 用户/主机自动降级串行"兜底未搬(ADR-02 草案砍 worker 分发,该兜底自然过时)
+
+### 1.4 收益点概述
 
 - **入口数 9 → 5**,调用方学习曲线陡降
 - **测试覆盖 0 → 47**,回归有护栏
@@ -52,7 +62,7 @@
 - **合规加强**:`[mask]` 声明式脱敏保证敏感字段源库端处理、敏感原值不出业务库
 - **坑修复**:老 `parse_ddl` 多日范围分区错位、`querySql` 模式 `column` 非 list 的 `ClassCastException`、`plugin_factory` eager import 链里死 import 破整条链路等
 
-### 1.4 待讨论 / 未收尾
+### 1.5 待讨论 / 未收尾
 
 - kb/93 ADR-02 草案(分布式归 DS worker group)正式拍板后,`worker.py` / `runner.py` 里 ssh 远端分发逻辑可砍
 - kb/93 ADR-03 草案(零点漂移决策)实施时迁 kb/12