Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Multi-threading libraries for .NET

I used multiple threads in a few programs, but still don't feel very comfortable about it.

What multi-threading libraries for C#/.NET are out there and which advantages does one have over the other?

By multi-threading libraries I mean everything which helps make programming with multiple threads easier.

What .NET integratet (i.e. like ThreadPool) do you use periodically? Which problems did you encounter?

like image 406
Xn0vv3r Avatar asked Jan 21 '09 07:01

Xn0vv3r


2 Answers

There are various reasons for using multiple threads in an application:

  • UI responsiveness
  • Concurrent operations
  • Parallel speedup

The approach one should choose depends on what you're trying to do. For UI responsiveness, consider using BackgroundWorker, for example.

For concurrent operations (e.g. a server: something that doesn't have to be parallel, but probably does need to be concurrent even on a single-core system), consider using the thread pool or, if the tasks are long-lived and you need a lot of them, consider using one thread per task.

If you have a so-called embarrassingly parallel problem that can be easily divided up into small subproblems, consider using a pool of worker threads (as many threads as CPU cores) that pull tasks from a queue. The Microsoft Task Parallel Library (TPL) may help here. If the job can be easily expressed as a monadic stream computation (i.e. with a query in LINQ with work in transformations and aggregations etc.), Parallel LINQ (same link) which runs on top of TPL may help.

There are other approaches, such as Actor-style parallelism as seen in Erlang, which are harder to implement efficiently in .NET because of the lack of a green threading model or means to implement same, such as CLR-supported continuations.

like image 103
Barry Kelly Avatar answered Nov 15 '22 20:11

Barry Kelly


I like this one http://www.codeplex.com/smartthreadpool

like image 45
Simon Avatar answered Nov 15 '22 20:11

Simon