Threadpools, difference between DMD and LDC

Kapps via Digitalmars-d-learn digitalmars-d-learn at puremagic.com
Sun Aug 3 23:54:52 PDT 2014


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.


More information about the Digitalmars-d-learn mailing list