[concurrency-interest] Thread Allocation

william.louth at jinspired.com william.louth at jinspired.com
Wed Feb 13 04:39:54 EST 2013


>From my perspective I see allocation as a form of capacity planning (or provision) - global resource limits, a cap on consumption irrespective of the service itself. In this way it is possible to over provision or over subscribe a managed resource.

The actual consumption (or assignment) of the capacity at a service level is a different matter and can be very distinct from what capacity is available in the thread pool. Here we look to control the consumption through resource reservation and its policing based on limits, policies and dynamic expansion/contraction per classified service using rate limiting, quotas, adaptive valves, caps, prioritization,....all of which can introduce delay or suspension of thread execution. 

Google recently published on performance variability which touches on this under the heading "Differentiating service classes and higher-level queuing".

I wrote about this just yesterday 
http://www.jinspired.com/site/google-engineering-on-performance-variability-the-tail-at-scale

For the optimal level the way to go is metered control valves: 
http://www.jinspired.com/research/adaptive-control-in-execution

The key strategy here is to design or instrument the system in such a way that you can influence the system dynamics (which we can't always be sure of) to do the right thing whether that is for better throughput, response time, safety or resource utilization.

http://www.jinspired.com/site/using-system-dynamics-for-effective-concurrency-consumption-control-of-code

William

>-----Original Message-----
>From: Pete Haidinyak [mailto:javamann at cox.net]
>Sent: Wednesday, February 13, 2013 09:48 AM
>To: concurrency-interest at cs.oswego.edu
>Subject: [concurrency-interest] Thread Allocation
>
>I have a question on how to allocate Threads. I am creating a SIEM which is a bunch of independent Java Services. The most likely use case is this will run on one 2U box. The box will have two quad core Xeon processors and 32G of RAM. Some of the Services will be I/O bound but some will be CPU bound.
>   In one of the latest discussion it was mentions that you should allocate a Thread for each core (plus or minus a couple) for the best throughput. I have the ability to turn the Thread Pools after startup based on the number and types of Services running on the box.
>
>My question is what would be the best way to allocate Threads when you have multiple processes competing for resources?
>
>Thanks
>
>-Pete





More information about the Concurrency-interest mailing list