tberghammer added a comment.

We can change this class to use std::async on Windows and an std::thread based 
implementation on Linux with the same interface (other OS-es should be decided) 
but I would prefer to use just 1 logic as it is easier to maintain.

Limiting the number of threads with adding a semaphore to the beginning of the 
lambda given to std::async wouldn't work because if the number of threads 
aren't limited inside the implementation of std::async then we still create a 
huge number of threads what will be blocked on the semaphore call but they 
still consume the resources. Guarding the std::async calls with a semaphore can 
limit the number of thread but it will make them a blocking call what isn't 
really something I want to see.

On Linux using this thread pooling code instead of std::async achieved a ~25% 
speedup on the dwarf parsing code. I haven't investigated the exact reasons but 
I think the difference is that we don't create a lot of thread (thread creation 
isn't too cheap) and the lower number of threads decrease the number of 
congestion.


http://reviews.llvm.org/D13727



_______________________________________________
lldb-commits mailing list
lldb-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits

Reply via email to