How Should I Run This Work?

Answer questions about the work — what it does, what it waits on, what it shares — never about an API. You arrive at an execution model together with its trade-offs, the ways it fails, and the simpler thing to consider first. All four are shown, always.

Start from the work, not from a primitive. The first question is whether the task spends its life computing or waiting — that single fact eliminates most of the options, and almost every bad concurrency decision starts by skipping it.

Is this work computing, or waiting?

How to answer honestly · Time one task end to end, then time it with the network and disk stubbed out. If the two are close it is compute-bound; if the stubbed version is far faster, the task spends its life waiting and its CPU sits idle.