ETS 创建 return 值
ETS creation return value
我正在使用 Elixir 1.6.3。
我正在使用 Elixir 中的 Erlang :ets
模块,我对 :ets.new/2
函数的 return 值感到有点困惑。
根据 doc's example,在调用 :ets.new(:whatever, [])
时,我应该 returned 看起来是整数的值:
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
的 return 值在 Erlang/OTP 20.0 中从整数更改为引用。来自 the README:
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.
我正在使用 Elixir 1.6.3。
我正在使用 Elixir 中的 Erlang :ets
模块,我对 :ets.new/2
函数的 return 值感到有点困惑。
根据 doc's example,在调用 :ets.new(:whatever, [])
时,我应该 returned 看起来是整数的值:
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
的 return 值在 Erlang/OTP 20.0 中从整数更改为引用。来自 the README:
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.