推理池
一个 darra_pool* = 同一模型的 1..8 个 darra_session + 有界任务队列。每张图仍走 darra_session_infer_image(单图)。没有 N=100 的批张量 API。C++ 与 C 共用同一份 C ABI,函数仍是 darra_ai.h 导出。
darra_pool_open / open_plain
│
├── darra_pool_submit 突发或流式进图,拿到 ticket
├── darra_pool_wait 阻塞等 JSON
├── darra_pool_try_wait 非阻塞;没好返回 DARRA_BUSY
└── darra_pool_close
max_workers 默认 1,硬顶 8。不是 100 个会话。GPU 上 yolov8n 建议 1–2;8GB+ 可试 2–4。100 张突发 = 队列,不是 100 份权重。worker.unique 强制为 1,不会跟用户 open 的驻留实例挤成一份。
Core 不链 CUDA,不探测「显存还能塞几个」——由调用方设 max_workers。多卡:每个池钉 worker.gpu_device;4 卡 = 4 个池,卡号 0..3。多模型抢同一卡:weight + darra_sched_set_gpu_slots。不是 CUDA SM 百分比。
PLC:池必须在扫描周期外的线程里跑。禁止改 Windows ReservedCpuSets,禁止动 PLC 隔离核。
句柄
typedef struct darra_pool darra_pool;
不透明句柄。定义只在 Core 内部,绑定侧永远只持有指针。darra_pool_close 之后句柄失效,再用 = 未定义行为。nullptr 关闭是安全的。
进图
突发:一次 submit 100 张。queue_capacity 必须 ≥ 突发量,或 overflow = BLOCK。
流式:每毫秒一张。GPU 若 5ms/张,队列会积压——必须选 overflow:
FAIL— 队列满立即DARRA_BUSYBLOCK—submit卡住背压DROP_OLDEST— 丢掉最旧未开跑的任务(摄像头保活最新帧);被挤掉的票wait得DARRA_BUSY