哪个erlang的游泳池适合?

时间:2015-07-15 23:35:33

标签: erlang pool

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

我已经阅读了poolboyworker_pool的文档,发现只有最大工人数量选项,但没有选项来减少它。

是否存在或如何修改它们?

2 个答案:

答案 0 :(得分:8)

poolboy 会在没有工作的情况下自动减少工作人员。

您让工作人员从池中使用checkout进行一些工作,并使用checking释放该工作人员,作为替代方法,您可以将工作附加到transaction上自动结帐工人在完成工作后检查工人。

启动池时, poolboy 会自动创建一些 size 工作人员,等待处理某些工作。

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

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

所以如果你创建一个像

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

它将立即启动100个进程,如果您一次结账(使用checkouttransaction)超过100名工作人员,那么对于新的结帐将开始创建流程,直到达到1000总共进程(从第一个时刻创建100个进程,最多900个进程溢出),如果你继续尝试检查更多进程,它将在超时时开始给出错误(除非你用infinity调用checkout,在这种情况下它会阻塞,直到一个工人完成任务完成,注意你也可以在不阻止调用者的情况下调用一个工人。)

现在,如果你需要更多的行为,比如保持溢出工作者继续运行直到它通过10分钟不活动,你需要自己做代码,在这种情况下你可以获得poolboy的源代码(它易于准备和遵循,主要代码在https://github.com/devinus/poolboy/blob/master/src/poolboy.erl及其仅350行代码)并根据您的需要更新release of workers

答案 1 :(得分:0)