Re:Unravelling `Async for` Loops
by speedgoose on Wednesday September 15, 2021 @12:37AM
(#28535310)
I personally prefer the async model over synchronization because for me, it's a lot simpler to manage the async/await than having to synchronize. I find golang to be more difficult than javascript in this aspect. Golang has better concurrency though.
[ Parent
| on HN ]
If you don't want to synchronize, you need to run your app on a single OS thread. That's the case for node.js. You can configure golang runtime to run on a single thread as well, I suppose that it would remove any need of synchronization either.
There are plenty of languages with both async model and multicore runtime support. For example Kotlin on JVM. You still need to synchronize on shared resources (or use other patterns like message passing).
Async does not magically save you from synchronization. It's just a quirk of node.js implementation.
Re:Unravelling `Async for` Loops
by speedgoose on Wednesday September 15, 2021 @03:41AM
(#28536362)
NodeJS has more than one single thread, network IOs notably are on another thread. That's the beauty of it.
Re:Unravelling `Async for` Loops
by patrickthebold on Wednesday September 15, 2021 @07:36AM
(#28537794)
Why would network IO be on another thread? libuv gives node non blocking network IO (or so was my understanding).
Unsure about network (if it's true that it's on a separate thread, perhaps it's because network operations take cpu time even when readied asynchronously--e.g. even after you select/[e]poll to determine what events to trigger next, the actual read/write/sendfile/whatever ops do take a little time). However, filesystem IO is performed in threads in libuv on many platforms, due to the unavailability of stable async IO capabilities.