【Erlang】ETS的并发性能调节选项
ETS在创建表时, 有 write_concurrency
和 read_concurrency
这两个选项,
可以用以优化ETS的并发性能.
write_concurrency
默认设置是 false
, 当表进行写操作时,
整个表会被锁起来, 直到写完为止. 把这个值设置为 true
, 可以优化并发写性能,
表中的不同项可以同时进行读写, 代价是会消耗一些内存, 并且会降低并发读的性能.
但是对于 order_set
类型的表, 目前的Erlang版本下是不受这个选项影响的.
read_concurrency
默认设置也是 false
, 当设置为 true
,
并且Erlang运行在多核机器上且开启SMP支持时, 并发读的性能会提升.
代价是读写切换变得更慢.
这两个选项是不会对操作的原子性和独立性有影响的, 也就是说这两项设置只改变性能, 不影响逻辑.
显然, write_concurrency
适用于读少写多的表,
read_concurrency
适用于读多写少的表, 以及读写交替少的表
(即读一大堆数据后再写一大堆, 读取操作较少被写入操作打断).
这两个选项是可以同时开启的, 但额外的内存消耗会更大.
测试一下, 分别对默认, 开启read_concurrency
, 开启 …