3 ms·
When I actually looked up these terms I found no strong, exact agreement on meanings. However, of the definitions I did find, the ones referenced in the Clojur
by chipsy 11y ago
When I actually looked up these terms I found no strong, exact agreement on meanings.
However, of the definitions I did find, the ones referenced in the Clojure documentation seemed most reasonable - from memory, something like the difference between coordination of simultaneous tasks, and their execution.
This definition allows for the existence of concurrent systems without formal concurrency primitives - every action game deals with race conditions even though the gameplay loop is typically single threaded, because it has to code apparently independent agents against a global shared-state environment, and the order in which these agents process data matters. In most instances there is no crisis for the game if the situation is left poorly specified - it may slightly bias some elements or defer events by an additional frame - but for certain things it can blow up into a showstopper bug with physics or cutscene triggers, or harm responsiveness.
This correlates with a common trope from students who encounter the agents problem for the first time - they try to run each AI on a thread, further pushing away their ability to direct concurrency, while "gaining" parallel performance(not really, of course).
- derefr 11y agoI would phrase it as: Concurrency is a possible feature of an abstract machine, exposed as a programming-language-design paradigm. A language can target a platform that "has concurrency", and this heavily shapes the language. You can end up "coding Go/Erlang in C"—writing concurrent code in your head for a concurrent abstract machine, then translating it to your target language. Parallelism, meanwhile, is a VM/runtime/platform implementation detail.