amibar / SmartThreadPool

A .NET Thread Pool fully implemented in C# with many features
http://www.codeproject.com/Articles/7933/Smart-Thread-Pool
Microsoft Public License
507 stars 182 forks source link

is it must to ShutDown/Dispose STP? #29

Open MatheswaranSagadevan opened 2 years ago

MatheswaranSagadevan commented 2 years ago

Hi, We recently explored STP, and started using it in one of our asp.net core application. and our implementation is like, during particular object's constructor we configure/instantiate the smart thread pool with work item groups and min, max threads etc.

There are two questions:

  1. We often face outofmemory exceptions, though we have 8 core, 16GB RAM with 1 TB HDD VM. any guidelines or best practices to adept ?
  2. when to use ShutDown and Dispose methods. Since this is a web application, we as said above, configured, in one of our singleton class. so when to dispose? or shutdown?
  3. I tried with destructor and it seems it didn't get called. Then I tried with application stopping event in asp.net core where I retrieve the singleton instance and called custom dispose method to shutdown and dispose stp. is this right approach?

Thanks, Matheswaran S

amibar commented 2 years ago

Hi,

I assume that your application works like a service. Hence, always running and serve requests.

I think you should instatiate the smart thread pool only once in a singleton with min and max threads. Later on create work item groups with the concurrency you need and queue work items into them. Since your application work like a service (as I assumed) you don't need to call to shutdown or dispose at all. When you stop the service you can use WaitForIdle() to wait for incompleted work items to finish.

Regards, Ami

MatheswaranSagadevan commented 2 years ago

Great, you are right it is a service. and I'm fine to use WaitForIdle instead of shutdown.

and how about Memory management.? any best practices and troubleshooting tips? because we often face outofmemory exception.

amibar commented 2 years ago

The outofmemory exception is out of my scope. I assume you get the exception becuase you get too many requests than you can handle so the backlog explodes. Try to limit the backlog to avoid requests overflow.