7 ms·
How does async/await mitigate #1? Interleaved execution is enough to give you data races; you don't need actual parallelism.
by closeparen 4y ago
How does async/await mitigate #1? Interleaved execution is enough to give you data races; you don't need actual parallelism.
- pron 4y agoYes, but it requires a special call site (transitively, all the way up the stack) that permits the interleaving, and so cannot sneak into existing code that might implicitly assume no interleaving.
- gpderetta 4y agobut good old callback-based code still allows for interleaving and AFAIK JS doesn't require any callsite allocation for that.
- pron 4y agoIt does not allow for interleaving. Interleaving means that state can change in the same subroutine.
- gpderetta 4y agoWhat I mean is that subroutine can observe its own state being changed even after a call of a non-sync marked function if that function directly or indirectly calls into a closure closing over that subroutine state. I.e. IMHO async offers very weak reentrancy guarantees that are better enforced via other means (rust-like lifetimes, immutability annotations, atomic contructs, etc).