3 ms·
I mean goroutines are not exactly coroutines nor are they threads they are somewhere in between. And its pretty easy to use the same workflow as goroutines in
by jpc0 3y ago
I mean goroutines are not exactly coroutines nor are they threads they are somewhere in between.
And its pretty easy to use the same workflow as goroutines in C++ using std::thread and a concurrent queue implementation, tbb has a decent one and moodycamels is also very good.
It's actual async/await that is a touch annoying but it's also fundamental building blocks, there are currently few abstractions ontop of it.
I also believe strongly async/await is an antipattern. There are better models to handle concurrency well imho that don't use function colouring. Golangs goroutines and channels (effectively actors but that's a can of worms) are a great solution and probably what you should be reaching for instead of async/await.
- surajrmal 3y agoCoroutines can be divided into two categories, stackless and stackful. goroutines are stackful coroutines.
- jpc0 3y agoExcept goroutines will absolutely spawn a thread which a coroutine by definition wont. Goroutines are parallel, coroutine are concurrent. Those are not the same thing. Coroutines co-operatively yeild to other coroutines. Parallel constructs run in parallel at the same time. Goroutines can run in parallel at the same time and thus are not a coroutine.
- gpderetta 3y agoMy understanding is that goroutines don't spawn threads per-se. They can be executed on parallel event loops, but that can be true for stackess coroutines in c++ for example.
- jpc0 3y agoYeah goroutines are a pretty high level abstraction but they are definitely closer in concept to green threads than to coroutines. You can run a C++ coroutine on a seperate thread but you effectively need to build all the task handling logic yourself of use a library that's build that out. Goroutines you don't need to use a specialised sleep fuction which is actually changing coroutine state, setting a timer and yeilding. You just sleep as an example