下のcoro_fibが実行時にシングルスレッド非同期スケーリングやマルチスレッドスケーリングが発動するかは
Task<T>の実装しだいなのであって、コルーチンと言う機構を用いて「非同期」を抽象化しているのよ

Task<size_t> coro_fib(size_t n) {
if (n < 2) co_return 1;
co_return co_await coro_fib(n - 2) + co_await coro_fib(n - 1);
}

こう書いたら実行も再帰コールになるけど
size_t fib(size_t n) {
if (n < 2) return 1;
return fib(n - 2) + fib(n - 1);
}

coro_fibの方はTaskの実装次第でシングルループ化させることが出来るわけよ