ETS创建返回值

右腿

我正在使用Elixir 1.6.3。我正在使用:etsElixir中的Erlang模块,但对该:ets.new/2函数的返回值有些困惑

根据doc的示例,在调用时:ets.new(:whatever, []),应该返回似乎是整数值的值:

iex> table = :ets.new(:buckets_registry, [:set, :protected])
8207

但是,当我在中运行完全相同的代码时iex,会得到一个参考:

iex(1)> table = :ets.new(:buckets_registry, [:set, :protected])     
#Reference<0.1885502827.460455937.234656>

那么,自编写文档以来,有什么改变吗?还是一样,我对引用是什么感到困惑?

乐高积木

是的,ets:new在Erlang / OTP 20.0中,返回值从整数更改为引用。自述文件

  OTP-14094    Application(s): stdlib

               *** POTENTIAL INCOMPATIBILITY ***

               Optimized ETS operations by changing table identifier
               type from integer to reference. The reference enables a
               more direct mapping to the table with less potential
               lock contention and makes especially creation and
               deletion of tables scale much better.

               The change of the opaque type for the ETS table
               identifiers may cause failure in code that make faulty
               assumptions about this opaque type.

               The number of tables stored at one Erlang node *used*
               to be limited. This is no longer the case (except by
               memory usage). The previous default limit was about
               1400 tables and could be increased by setting the
               environment variable ERL_MAX_ETS_TABLES before starting
               the Erlang runtime system. This hard limit has been
               removed, but it is currently useful to set the
               ERL_MAX_ETS_TABLES anyway. It should be set to an
               approximate of the maximum amount of tables used. This
               since an internal table for named tables is sized using
               this value. If large amounts of named tables are used
               and ERL_MAX_ETS_TABLES hasn't been increased, the
               performance of named table lookup will degrade.

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章