Why Do You Need a Pool

There are a number of reasons you may want to use a pool of workers in your application.

1) Distribute work across all available CPUs.

For that, we create fixed number of threads with the desired level of parallelism = the number of available cores of the host’s CPU. Example in Java.

ExecutorService executor = Executors.newFixedThreadPool(4);

This may require some tuning. A number of threads could be increased or decreased. Alternately, you could switch to WorkStealingPool if fork/join model better suits your needs. Refer to https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/Executors.html for more information.

2) Open N connections to an external resource (typically, a database)

This gives us a lot of benefits (some of them are not so obvious):

I think, only the last one requires explanation, others are pretty obvious.

Our friend Barney here wants to buy some beer, so he takes a long walk to the nearest store. It will take him 3 * (t1 + t2) to buy 3 beers.

t1 is a network latency, t2 - processing time.

What if instead, he and his buddies will go to the store together. Even if the store has only one cash register (like Redis) and the cashier serve them in turn, they will buy 3 beers in t1 + 3 * t2.

Most often t1 much greater than t2. Therefore, t1 + 3 * t2 < 3 * (t1 + t2). In other words, it is better to send N requests in parallel comparing to sending one by one because the network latency is greater than time to process a request.

If you have any comments, you could leave them below or send me an email.


comments powered by Disqus