哪个erlang的游泳池适合?

Che*_* Yu 2 erlang pool

我希望这个池有一个能力(或多个选项),当这些池空闲超时时,它可以自动减少它的工作量.

我已经阅读了doc的文档,poolboy并且worker_pool发现只有最大工人数量选项,但没有选项可以何时减少它.

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

ror*_*rra 8

当没有工作时,poolboy会自动减少工作人员.

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

当您启动池时,poolboy会自动创建一些大小的工作程序,等待处理某些工作.

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

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

所以如果你创建一个类似的池

{pool, [
        {size, 100},
        {max_overflow, 900}
]}
Run Code Online (Sandbox Code Playgroud)

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

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

  • 这个答案应该在Poolboy项目的Wiki上:) (2认同)