Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

ASP.NET MVC Multi-Threading, is it worth it?

I'm a bit confused, my ASP.NET MVC app will be hosted on a server, so is there any point in making it multi-threaded? For example, if I want one thread to execute my translations, is this a good idea? Can someone elaborate this to me please? I'm a bit confused with web apps multi-threading versus desktop apps multi-threading.

like image 258
AlCode Avatar asked May 08 '15 11:05

AlCode


2 Answers

There's a few things to this.

The first is that every ASP.NET application (MVC or otherwise) is inherently multi-threaded: Each request will be processed on a separate thread, so you are automatically in a multi-threading situation and must consider this with any shared access to data (e.g. statics, etc.).

Another is that with MVC its particularly easy to write asynchronous controller methods like:

public async Task<ActionResult> Index(int id)
{
  var model = await SomeMethodThatGetsModelAsync(id);
  return View(model);
}

Now, if we're already multi-threaded then why bother? The benefit is (ironically in a way) to use fewer threads. Assuming that SomeMethodThatGetsModel(id) may block or otherwise hold up the thread, awaiting on SomeMethodThatGetsModelAsync(id) allows the current thread to handle another request. One of the limits on how many requests a webserver can handle is how many threads it can have handling those requests. Free up threads and you increase your throughput.

A further is that you may want some operation to happen in the background of the application as a whole, here the reason is the same as with desktop applications.

Simpilarly, if you have work that can be done simultaneously and which blocks (e.g. hit a database and two webservices) then your reason for doing so in a multi-threaded manner is the same as with a desktop app.

(In the last two cases though, be wary of using the default static thread pool, such as through ThreadPool.QueueUserWorkItem or Task.Run. Because this same thread pool is used for the main ASP.NET threads if you hit it heavily you're eating from the same plate as your framework. A few such uses is absolutely fine, but if you're making heavy use of separate threads then use a separate set of threads for them, perhaps with your own pooling mechanism).

like image 132
Jon Hanna Avatar answered Oct 25 '22 02:10

Jon Hanna


is there a point to make it Multi-Threaded?

that's won't work. The question is: does your application needs multi-threading? For example, if you receive a collection of big entities, that need to be preprocessed somehow before further actions, you might process each of them in separate thread instead of cycle.

Im a bit confused with web apps multi threading vs desktop apps multi threading

Multithreading in asp.net and desktop are the same thing and works the same way.

like image 22
Vlad Levchenko Avatar answered Oct 25 '22 02:10

Vlad Levchenko