I'm really interested in concurrency strategies in programming languages, and because there's a lot of written research out there on the topic, you...
For further actions, you may consider blocking this person and/or reporting abuse
Really well described
Thanks Ben π
This post falls prey to an issue I find very common to people new to asynchronous code: Conflating asynchronous code with concurrent code. This leads to a lot of pain or at least confusion down the line and it's important to understand the difference.
Concurrency means that two or more threads of execution run concurrently - i.e. in parallel.
Asynchronous code on the other hand is a form of cooperative scheduling, usually implemented via continuation passing style (CPS). Simplified, async code doesn't mean that code runs in parallel just that you switch executing different code on the same thread.
You can combine the two concepts, which is often done, but you don't have to: You can have asynchronous code in a single-threaded program without any problems. Hell you can await a task/promise/whatever you want to call it without ANY thread being involved!
This seems like it's probably helpful advice, but the line "this post falls prey to an issue I find very common to people new to asynchronous code" is condescending and unnecessary. Next time, I'd advise just giving the feedback without categorizing the mistake as something that people new to asynchronous code make.
However your comment falls prey to using concurrent and parallel synonymously where by async/await is in fact concurrent but not parallel.
medium.com/@itIsMadhavan/concurren...
@jesse Interesting definition and I can absolutely see the value in distinguishing between the two that way.
That doesn't seem to be the only definition though and not the one I'm used to. If you look at say the C++ memory model definition in the standard or Java Concurrency in Practice (to name one seminal book in that area) both use "concurrently" meaning "parallel".
e.g. from the standard: "Thus a bit-field and an adjacent non-bit-field are in separate memory locations, and therefore can be concurrently updated by two threads of execution without interference"
Yeah, I'm not too fond of trying to make a distinction for those terms... I always have to look up which one is which. But asynchronous has the same issue.
Totally agree, the concurrency is only in the fact that there are multiple "stacks" of things that will happen on continuation. Using async code to perform collaborative tasks is possible but a blunt instrument. I did some stuff around a more fine-grained collaborative multitasking that I talk about here:
60fps Javascript while you stringify, parse, process, compress and filter 100Mbs of data
Mike Talbot γ» May 25 γ» 9 min read
Simplified and clear explanation. Thanks man
Thanks for this!
clickbait title
Great,looking forward to read your other articles too!