Skip to content

Comment on Concurrent Programming, with Examples

Comments

Does anyone know the history behind the distinction between concurrency and parallelism presented here? The most frequent reference I see is Pike's "Concurrency is not parallelism" talk, but I'm curious who first came up with this distinction.

More food for thought, as I've been thinking about this:

1. std::thread::hardware_concurrency

This is the number of threads that can execute in parallel, no?

2. "Memory-level parallelism"

How many memory operations can be "outstanding" at once - seems comparable to a single core issuing multiple disk reads. The memory operations aren't really serviced simultaneously, they just have overlapping lifetimes.

For more fun, some people refer to the case where performance is limited by the amount of memory-level parallelism available as "concurrency-limited": https://sites.utexas.edu/jdm4372/2018/01/01/notes-on-non-tem...

You can have concurrency without parallelism per the definition of the article - on a single processor system with timeslicing, for example.

SIMD systems effectively give you parallelism without concurrency - only one instruction is executing, but it's operating on multiple dataflows.

Your linked definition of "concurrency limited" seems to refer to utilisation. In the scenario described, how effectively the processor can be utilised depends on how many concurrent tasks it has in progress so it has something to do while one of them is waiting for a cache miss.

AboutSource Built by g1lg1l

Hackerly is an independent reader for Hacker News, built on the public HN API. Not affiliated with Y Combinator.