[erlang-questions] Questions about ETS locking

By default, several concurrent readers can access the same table at the same time. Option read_concurrency will make concurrent reading even more faster at the expense of a slower operation when switching between "read mode" and "write mode". http://www.erlang.org/doc/man/ets.html#new_2_read_concurrency /Sverker, Erlang/OTP skyman wrote: > Oh, I see. Thanks a lot. > Another question: is default reading from an ETS table is concurrency? what's the difference between the default reading and option read_concurrency? > Thank you! > > > > > > At 2012-05-07 20:55:39,"Sverker Eriksson" <sverker@REDACTED> wrote: > >> skyman wrote: >> >>> Hi all, >>> >>> >>> I know when access an ETS table, there are wo locks that need to be taken. >>> 1) A lock to access the meta table, to convert the numeric table identifier >>> to a pointer to the actual table. >>> >>> 2) The lock for the table itself (either a read or write lock). >>> I know in the SMP mode£¬an ETS table must be locked when access it, but I don't make sure that must an ETS table be locked in the non-SMP mode(only one scheduler)? >>> >>> >> An SMP-enabled emulator will do the locking even when running only one >> scheduler. >> A non-SMP emulator (erl -smp disable) will not do any locking. >> >> >>> Another question is, whether the default ETS table locking is on table-level or on record-level? >>> Thanks in advance! >>> >>> >>> >> The default locking is on table-level, allowing only one update >> operation at a time per table. >> Table option write_concurrency will enable locking on a more fine >> grained level, allowing concurrent update operations. In current >> implementation 16 locks per table is used, which result in a probability >> of 1/16 that two random keys will collide on the same lock. >> >> Option write_concurrency have no effect on ordered_set's. >> >> >> /Sverker, Erlang/OTP Ericsson >> >> >>