2 ms·
Parallelism and concurrency are fundamentally different things. Parallelism is running independent computations simultaneously. Concurrency control is managing
by catnaroek 10y ago
Parallelism and concurrency are fundamentally different things. Parallelism is running independent computations simultaneously. Concurrency control is managing the use of shared resources by temporarily granting exclusive access to them to individual computations.
Imperative languages tend to blur the distinction between parallelism and concurrency, because the global state of a process by itself can be considered a shared resource. But in functional languages, it's natural to expect a sharper distinction: Because most data structures are logically immutable, the primary use for concurrency control is managing the interaction between the program and the “outside world”. On the other hand, parallelism is a powerful tool for speeding up the program's own internal calculations, even when no interaction with the “outside world” is involved.
- gpderetta 10y agoConcurrency is a property of the software (i.e. the problem domain): i.e. having multiple independent control flows. Parallelism is a property of the hardware, i.e. having the capability of running multiple operations (be it pure computation, memory access or IO). To make use of parallel hardware you need concurrent software. Async is a way of exposing additional concurrency, thus enabling parallelism, to the hardware.
- catnaroek 10y ago> Parallelism is a property of the hardware, i.e. having the capability of running multiple operations (be it pure computation, memory access or IO). Parallelism is a property of the program too: if it doesn't have independent subcomputations, the program is going to run sequentially even in hardware that supports parallelism. > To make use of parallel hardware you need concurrent software. Parallel Haskell shows otherwise.
- gpderetta 10y ago>if it doesn't have independent subcomputations, the program is going to be run sequentially even in hardware that supports parallelism. the property of having independent sub-computations is called concurrency.
- catnaroek 10y ago> the property of having independent sub-computations is called concurrency. Nope. If I have two n-dimensional vectors, and want to compute their sum, there's no concurrency whatsoever: there's just n independent computations (each scalar sum). A pure parallelism problem. (Well, there is a concurrency problem at a lower level of abstraction, if you want to schedule these computations over less than n processors. That's because the processors are shared resources that require temporary exclusive access to be used.) References: (0) https://existentialtype.wordpress.com/2011/03/17/parallelism-is-not-concurrency/ https://existentialtype.wordpress.com/2011/03/17/parallelism... (1) https://existentialtype.wordpress.com/2014/04/09/parallelism-and-concurrency-revisited/ https://existentialtype.wordpress.com/2014/04/09/parallelism...
- gpderetta 10y agoI see your blog article and raise a wikipedia [1]: "In computer science, concurrency is the decomposability property of a program, algorithm, or problem into order-independent or partially-ordered components or units. This means that even if the concurrent units of the program, algorithm, or problem are executed out-of-order or in partial order, the final outcome will remain the same. This allows for parallel execution of the concurrent units, which can significantly improve overall speed of the execution in multi-processor and multi-core systems." Note the 'decomposability' part, i.e. the having the property of being decomposable. [1] https://en.wikipedia.org/wiki/Concurrency_%28computer_science%29 https://en.wikipedia.org/wiki/Concurrency_%28computer_scienc...
- catnaroek 10y agoZeroth, I'm not the owner of that blog. He's a CS researcher, I'm just a lowly programmer in the trenches. Just wanted to make that clear. First, the Wikipedia article you quote is partially incorrect: > This means that even if the concurrent units of the program, algorithm, or problem are executed out-of-order or in partial order, the final outcome will remain the same. This is not true. Consider the following example: Mr. Foo and Ms. Bar are happily married, and own a shared bank account, whose initial balance is $400. Concurrently, they attempt to withdraw $200 and $300 respectively. The scheduling of the withdrawal operations will determine the final result: (0) Foo has $200, Bar has nothing, and the final account balance is $200. (1) Foo has nothing, Bar has $300, and the final account balance is $100. > Note the 'decomposability' part, i.e. the having the property of being decomposable. Both parallelism and concurrency are about decomposition. They are different kinds of decomposition, though. Parallel tasks cooperate towards a common goal. Concurrent tasks compete for access to common resources.