top | item 42135350

(no title)

tightbookkeeper | 1 year ago

> you run out of (OS) threads very fast.

What does run out mean?

discuss

order

Ygg2|1 year ago

Each thread is tied to an OS thread, which is tied to a CPU core/hyper-thread. You get like ~6000 threads on a modern OS and CPU.

Your program needs one million threads that sleep for 2 seconds, read some data and then finish. Guess what? Your execution is going to take hours, or get some kind of exception that you run out of threads because after the first ~6000 threads are taken, your OS can no longer give threads to anything else.

With Green threads, the threads are fake aka virtual and controlled by the language's runtime, be it JVM, CLR, Go's runtime etc. Runtime is usually smart enough to recognize sleeps and, while waiting for something, schedule another thread in its space.[1] So now all one million threads start near instantly and work almost all in parallel.

[1]https://www.youtube.com/watch?v=bOnIYy3Y5OA

tightbookkeeper|1 year ago

Desktop OS may struggle at thousands of thread. Linux can handle many more just fine.

> Your program needs one million threads that sleep for 2 seconds, read some data and then finish.

I have yet to see this problem, but yeah I agree that millions is about when there will be problems.