Expand description
Instance pool for a loaded plugin.
Each LoadedPlugin owns a PluginPool. Concurrent calls into the
plugin acquire an instance from the pool (creating one on demand
up to a pre-set max); when the call finishes, the instance returns
to the pool for reuse. Bounded by a tokio::sync::Semaphore so the
orchestrator’s parallelism doesn’t exceed max_instances.