mirror of
https://github.com/metabarcoding/obitools4.git
synced 2026-04-30 12:00:39 +00:00
8c7017a99d
- Update obioptions.Version from "Release 4.4.29" to "/v/ Release v5" - Update version.txt from 4.29 → .30 (automated by Makefile)
1.6 KiB
1.6 KiB
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(default1.0) - Read-specific:
_ReadWorkerPerCore(0.25, i.e., ~1 reader per 4 cores) - Write-specific:
_WriteWorkerPerCore(0.25)
- General:
- 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-cpuor-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.