Um, "overlapping computation and communication" isn't the point of concurrency *at all*.
The point of concurrency is that transistors (and thus parallel computation) is incredibly cheap, but that specifying a program as "do X *then* do Y (etc)" forces all those transistors to sit idle waiting for X to complete before they can start doing Y.
That's of tremendous real-world importance. The difficultly of writing parallel applications is the *only* reason we don't all have 8 or so processors on our machines and so execute our "real world apps" 1-8 times faster. Instead we spent a tremendous amount of transistors "guessing" what might be done next, because we can't "actually" do Y until X has finished.