I'm curious what is the difference between lightwe...
# coroutines
t
I'm curious what is the difference between lightweight threads and threads? I haven't really played with Qasar and I'm just starting to play with coroutines. What makes them less expensive? Are they just a better abstraction? Are they backed and distributed to traditional threads?
d
Lightweight threads probably refer to “fibers” or “green threads”. There are usually many fibers running on a single OS thread, and because OS threads are relatively expensive to create, you can have many more fibers than you can OS threads.
t
So this is not an abstraction but rather the opposite. it's going deeper into the OS resources at a more granular level?
d
It’s sort of an abstraction. So you have many fibers per one OS thread. So if you have a lot of co-routines (hundreds or thousands), it doesn’t require allocations hundreds or thousands of OS threads, which are pretty expensive (typically 1MB of stack memory to begin with).
The OS doesn’t know anything about fibers.
https://en.wikipedia.org/wiki/Fiber_(computer_science) here’s the wikipedia article for more information 🙂
t
Fascinating, thanks
g
@thomasnield I think the way to think of a fiber is as a job, where the platform provides us with a single static job queue, and threads are the things executing those jobs. Given such a system, one job might in turn enqueue three more jobs. With some compiler magic, you can actually get one method spread into multiple sequential jobs, each one enquing the next, which is where the coroutine compiler support in kotlin comes in.