Fair point. There are maybe a couple of ways to answer that:
One app’s data will be stored on and retrievable from multiple machines/replicas on the network, related to consensus needs and also allowing faster serving similar the way traditional content delivery networks do.
Concurrent calls can be served for queries (non state changing), with update calls interleaved if they make inter-canister calls, as per the article Gabriel linked above.
Within a call, it doesn’t currently run executions on multiple cores as in multi-threading, which arguably could be hidden from the developer too. There was a great post on this by Nick here actually: The future: Deterministic parallelism within a canister? (i.e. multi-core and many-core canisters)