哪个erlang的pool合适?

which erlang's pool is suitable?

我希望这个池有能力(或选项)在最大空闲超时时自动减少其工作人员的数量。

我看了poolboyworker_pool的文档,发现只有最大工人数量选项,没有什么时候减少的选项。

是否存在或如何修改?

poolboy 在没有工作时自动减少工人。

你让一个工人从池中用 checkout 做一些工作,然后用 checking 释放工人,作为替代,你将工作附在 transaction 上自动检查工作人员并在完成后检查工作人员。

当您启动池时,poolboy 会自动创建一些 size worker,等待处理一些工作。

当您调用 checkout 时,poolboy 会尝试获取其中一个已经启动的工作人员,如果所有工作人员都已经结账,因为他们正在做一些工作,它会检查它的 max_overflow 配置,它开始创建 worker 来处理负载,直到达到 max_overflow.

当一个工人被释放时,如果没有更多的工作给工人,他们就会被杀死。

所以如果你创建一个像

这样的池
{pool, [
        {size, 100},
        {max_overflow, 900}
]}

它将立即启动 100 个进程,如果您一次签出(使用 checkouttransaction)超过 100 个工作人员,那么对于新的签出将开始创建进程,直到他们总共达到 1000 个进程(从一开始就创建了 100 个,最大溢出 900 个进程),如果您继续尝试签出更多进程,它将开始在超时时出现错误(除非您使用 infinity 调用签出在这种情况下,它会阻塞,直到工作人员有空完成工作,请注意,您也可以在不阻塞调用者的情况下呼叫工作人员。

现在,如果您需要更多的行为,比如让溢出的工作人员继续工作,直到超过 10 分钟不活动,您将需要编写自己的代码,在这种情况下,您可以获取源代码poolboy(这很容易准备和遵循,主要代码根据您的需要https://github.com/devinus/poolboy/blob/master/src/poolboy.erl and its only 350 lines of code) and update the release of workers

https://github.com/seth/pooler also has such a capability. Please refer to https://github.com/seth/pooler#culling-stale-members节。