Skip to main content

You are not logged in. Your edit will be placed in a queue until it is peer reviewed.

We welcome edits that make the post easier to understand and more valuable for readers. Because community members review edits, please try to make the post substantially better than how you found it, for example, by fixing grammar or adding additional resources and hyperlinks.

6
  • 1
    Interesting! Indeed, it's not easy to transform increased multithreading into increased performance. Running more threads, even with multithreaded cores, reduces slightly the speed of each individual thread, while at the same time it can increase significantly the global throughput (see experiment here on SO). But the global throughput increases only if the processing task can be parallelized, which is not obvious for many algorithms that rely on sequential flow (example on SE). Commented Jul 11, 2020 at 12:58
  • You may want to try thread pools in the future. The overhead of multi threading can be reduced significantly if done carefully. The main bottleneck is interdependency between threads. The more you can isolate the work of each thread, the more leverage you'll get. Commented Jul 11, 2020 at 15:55
  • @Brent The code does use the system thread pool ( System.Threading.ThreadPool.QueueUserWorkItem) however the time to queue a task for execution is still quite significant, typically several micro-seconds. This means a task that takes roughly this time or less ( and modern processors can do a lot of work in this time ) is not a good candidate for parallel execution. Commented Jul 11, 2020 at 17:21
  • 3
    Not just intensive computations. GUI applications are inherently multithreaded (unless they do no serious work, or freeze the UI whenever they're doing it). So are applications which read external data streams (video, sensor data, stock prices…), or which respond to incoming requests (web servers…). Commented Jul 11, 2020 at 17:55
  • You have a rather limited idea of what constitutes "intensive computations" :-) Really intensive computations may have threads that run for hours, days, or even longer, so the setup time is inconsequential. Commented Jul 11, 2020 at 20:45