([docs](https://www.fleetcode.com/oss/tmc/docs/v1.4/executors/ex_cpu.html#hybrid-work-steering))([example](https://github.com/tzcnt/tmc-examples/blob/44ce66de8e74107c803645c82ddd88a7be35fd29/examples/hwloc/hybrid_executor.cpp)) Implement work steering for P- and E- cores on hybrid chips (e.g. Intel Hybrid / ARM big.LITTLE). Apple M / MacOS is also supported by setting the QoS class.
* ([example](https://github.com/tzcnt/tmc-examples/blob/44ce66de8e74107c803645c82ddd88a7be35fd29/examples/hwloc/asio_thread_per_core.cpp)) Turn Asio into a thread-per-core, share-nothing executor
* ([example](https://github.com/tzcnt/tmc-examples/blob/44ce66de8e74107c803645c82ddd88a7be35fd29/examples/hwloc/asio_server_per_cache.cpp)) Create an Asio thread *and* a worker thread pool for each chiplet in the system, that communicate exclusively within the same cache. This lets you scale both I/O and compute without cross-cache latency.
# Killer Features, Round 2
TooManyCooks offers several other features that others do not:
* ([docs](https://fleetcode.com/oss/tmc/docs/v1.4/halo/index.html)) ([example](https://github.com/tzcnt/tmc-examples/blob/44ce66de8e74107c803645c82ddd88a7be35fd29/tests/test_halo.cpp)) support for the only working HALO implementation ([Clang attributes](https://clang.llvm.org/docs/AttributeReference.html#coro-await-elidable))
* ([docs](https://www.fleetcode.com/oss/tmc/docs/v1.4/type_traits.html)) type traits to let you write generic code that handles values, awaitables, tasks, and functors
* ([docs](https://www.fleetcode.com/oss/tmc/docs/v1.4/priority.html)) support for multiple priority levels, as well as executor and priority affinity, are integrated throughout the library
* ([example](https://github.com/tzcnt/tmc-examples/blob/44ce66de8e74107c803645c82ddd88a7be35fd29/examples/asio/http_server.cpp)) seamless Asio integration
# Mundane Feature Parity
TooManyCooks also aims to offer feature parity with the usual things that other libraries do:
* ([docs](https://www.fleetcode.com/oss/tmc/docs/v1.4/executors/index.html)) various executor types
* ([docs](https://www.fleetcode.com/oss/tmc/docs/v1.4/awaitables/index.html)) various ways to fork/join tasks
* ([docs](https://www.fleetcode.com/oss/tmc/docs/v1.4/data_structures/channel.html)) async data structures (tmc::channel)
* ([docs](https://www.fleetcode.com/oss/tmc/docs/v1.4/control_structures/index.html)) async control structures (tmc::mutex, tmc::semaphore, etc)
# Designed for Brownfield Development
TooManyCooks has a number of features that will allow you to slowly introduce coroutines/task-based concurrency into an existing codebase without needing a full rewrite:
* ([docs](https://fleetcode.com/oss/tmc/docs/v1.4/awaitables/fork_group.html)) flexible awaitables like `tmc::fork_group` allow you to limit the virality of coroutines - only the outermost (awaiting) and innermost (parallel/async) function actually need to be coroutines. Everything in the middle of the stack can stay as a regular function.
* global executor handles (`tmc::cpu_executor()`, `tmc::asio_executor()`) and the `tmc::set_default_executor()` function let you initiate work from anywhere in your codebase
* ([docs](https://fleetcode.com/oss/tmc/docs/v1.4/executors/ex_manual_st.html)) a manual executor lets you run work from inside of another event loop at a specific time
* ([docs](https://fleetcode.com/oss/tmc/docs/v1.4/integration/external_awaitables.html#default-behavior-it-just-works)) ([example](https://github.com/tzcnt/tmc-examples/blob/44ce66de8e74107c803645c82ddd88a7be35fd29/examples/external/external_awaitable.cpp)) foreign awaitables are automatically wrapped to maintain executor and priority affinity
* ([docs](https://fleetcode.com/oss/tmc/docs/v1.4/integration/external_awaitables.html#fully-integrating)) ([example](https://github.com/tzcnt/tmc-examples/blob/44ce66de8e74107c803645c82ddd88a7be35fd29/examples/external/callback_awaitable.hpp#L157)) or you can specialize `tmc::detail::awaitable_traits` to fully integrate an external awaitable
*
Post #24740
9