On Monday, 4 August 2014 at 05:14:22 UTC, Philippe Sigaud via
Digitalmars-d-learn wrote:
I have another question: it seems I can spawn hundreds of
threads
(Heck, even 10_000 is accepted), even when I have 4-8 cores. Is
there:
is there a limit to the number of threads? I tried a threadpool
because in my application I feared having to spawn ~100-200
threads
but if that's not the case, I can drastically simplify my code.
Is spawning a thread a slow operation in general?
Without going into much detail: Threads are heavy, and creating a
thread is an expensive operation (which is partially why
virtually every standard library includes a ThreadPool). Along
with the overhead of creating the thread, you also get the
overhead of additional context switches for each thread you have
actively running. Context switches are expensive and a
significant waste of time where your CPU gets to sit there doing
effectively nothing while the OS manages scheduling which thread
will go and restoring its context to run again. If you have
10,000 threads even if you won't run into limits of how many
threads you can have, this will provide very significant overhead.
I haven't looked into detail your code, but consider using the
TaskPool if you just want to schedule some tasks to run amongst a
few threads, or potentially using Fibers (which are fairly
light-weight) instead of Threads.