当你需要Erlang中的高性能共享状态时,你会怎么做?

Bre*_*k89 4 erlang

Erlang非常善于通过不共享状态来清理事物.但是当你想要共享状态时会发生什么?例如:配置选项,统计信息收集,事件/回调服务器.使用某些记录作为状态或使用进程字典生成新进程是实现共享状态的一种方法.您可以反复循环该过程并回复任何消息.多个进程将使用基本上不纯的getter和setter函数来查询该进程,这些函数包含消息传递,但是在这里我们只是将Erlang变成一个比java对象慢的不纯对象,因为减少系统轮流比只有每个全局状态周围的内存互斥体.如果我们不小心,它甚至可能有邮箱溢出.

那么,如果你想要快速共享状态,你会怎么做?Reddis,一个数据库,mnesia,产生循环状态?如何在erlang中使集中状态更加纯粹功能?

Ste*_*ski 6

使用公共(任何人都可以读或写)或受保护(一个作者,多个读者)和使用该选项创建的named_table.需要访问表中共享状态的每个进程都可以通过其名称到达表.

  • @ BreezyChick89,使用状态进程字典的`gen_server`的问题是,任何想要访问状态的进程都必须调用`gen_server`进程来获取它,并且`gen_server`可能成为瓶颈.我在2011年写了一篇关于流程瓶颈的文章(http://steve.vinoski.net/blog/2011/03/19/process-bottlenecks-in-erlang-web-apps/),探讨了类似的问题. (2认同)