Files
obitools4/autodoc/docmd/pkg/obidefault/workers.md
T
Eric Coissac 8c7017a99d ⬆️ version bump to v4.5
- Update obioptions.Version from "Release 4.4.29" to "/v/ Release v5"
- Update version.txt from 4.29 → .30
(automated by Makefile)
2026-04-13 13:34:53 +02:00

1.6 KiB
Raw Blame History

Obidefault: Parallelism Configuration Module

This Go package (obideault) provides a centralized, configurable interface for managing parallel execution parameters—particularly useful in I/O- and CPU-bound workloads.

Core Concepts

  • CPU-aware defaults: Automatically detects available cores via runtime.NumCPU().
  • Configurable workers per core:
    • General: _WorkerPerCore (default 1.0)
    • Read-specific: _ReadWorkerPerCore (0.25, i.e., ~1 reader per 4 cores)
    • Write-specific: _WriteWorkerPerCore (0.25)
  • Strict overrides: Allow hardcoding worker counts via SetStrictReadWorker()/Write..., bypassing per-core scaling.

Public API

Function Purpose
ParallelWorkers() Total workers = MaxCPU() × WorkerPerCore
Read/WriteParallelWorkers() Resolves to strict count if set, else per-core calculation (min 1)
ParallelFilesRead() Files read in parallel: defaults to ReadParallelWorkers(), overridable
Getters (MaxCPU, WorkerPerCore, etc.) Expose current settings safely
Setters (Set*) Dynamically adjust behavior at runtime

Configuration Sources

  • Command-line flags: e.g., --max-cpu or -m
  • Environment variable: OBIMAXCPU

Design Highlights

Decouples resource discovery from policy
Supports both proportional (per-core) and absolute (strict) worker definitions
Ensures non-zero defaults for critical paths (ReadParallelWorkers ≥ 1)

⚠️ Note: WriteParallelWorkers() contains a likely bug—returns _StrictReadWorker in the else branch instead of StrictWriteWorker.