# `Benchee.Benchmark.Runner`
[🔗](https://github.com/bencheeorg/benchee/blob/1.5.1/lib/benchee/benchmark/runner.ex#L1)

Internal module "running" a scenario, measuring all defined measurements.

# `collect`

Takes one measure with the given collector.

Correctly dispatches based on the number of iterations to perform.

# `main_function`

# `measure_and_report_function_call_overhead`

# `run_once`

# `run_scenarios`

```elixir
@spec run_scenarios([Benchee.Scenario.t()], Benchee.Benchmark.ScenarioContext.t()) ::
  [
    Benchee.Scenario.t()
  ]
```

Executes the benchmarks defined before by first running the defined functions
for `warmup` time without gathering results and them running them for `time`
gathering their run times.

This means the total run time of a single benchmarking scenario is warmup +
time.

Warmup is usually important for run times with JIT but it seems to have some
effect on the BEAM as well.

There will be `parallel` processes spawned executing the benchmark job in
parallel.

