Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

which erlang's pool is suitable?

Tags:

erlang

pool

I hope this pool has a capability (or options) for auto reduce its worker's quantity when these are free for a max idle timeout.

I have read the doc of poolboy and worker_pool and found there is only maximum worker quantity option, but no option for when to reduce it.

Does it exist or how to modify them?

like image 465
Chen Yu Avatar asked Dec 25 '22 16:12

Chen Yu


1 Answers

poolboy automatically reduces workers when there is not work for them.

You get a worker to do some work with checkout from the pool, and you release the worker with checking, as an alternative, you enclose the work on transaction which automatically checkouts the worker and after its done it checkins the worker.

When you start the pool, poolboy automatically creates a number of size workers, waiting to handle some work.

When you call checkout, poolboy tries to get one of the workers which is already started, if all of the workers are already checkout because they are doing some work, it checks its max_overflow configuration and it starts to create workers to handle the load until it reaches max_overflow.

When a worker is released, if there are not more jobs for the workers, they are killed.

So if you create a pool like

{pool, [
        {size, 100},
        {max_overflow, 900}
]}

It will start right away 100 processes, and if you checkout (either with checkout or transaction) more than 100 workers at a time, then for new checkouts will start creating processes until they reach 1000 processes in total (100 created from the first moment and a max overflow of 900 processes), if you continue trying to checkout more processes, it will start giving errors on timeout (unless you call the checkout with infinity in which case it will block until a worker gets free to get the job done, notice that you also can call a worker without blocking the caller).

Now, if you need more behavior than that, like kept the overflow workers going on until it pass 10 minutes of inactivity, you will need to do your own code, on which case you can just get the source code of poolboy (which is easy to ready and follow, main code is on https://github.com/devinus/poolboy/blob/master/src/poolboy.erl and its only 350 lines of code) and update the release of workers according to your needs

like image 71
rorra Avatar answered Jan 11 '23 11:01

rorra