Does ets:select/2 block the VM?

Shawn Pearce <>
Mon Mar 3 04:27:28 CET 2003

I'm wondering about the implementation of ets:select/2.

If I match against a table with 200k records it takes nearly 1 second to
complete on my system.  I think I'm ok with this performance wise, but
I can't have the ets:select/2 call block the entire emulator, other traffic
still needs to be executed and processed in other processes.

An informal test where I spawn up a background process and have it
use io:format/2 every 10 milliseconds to print a message seems to run
perfectly fine while a 1 second ets:select/2 runs in another process.

I'm assuming thus that the Erlang system authors have thought about this
and have ensured that it doesn't become a problem.  :-)

Also, the documentation is vague as to what happens if the table owner
modifies a protected ets table using insert or delete while other
processes are using ets:select/2 or ets:select/3 (select with
a limit and continuation).  Is it safe to perform this, or does
the reader process have to use ets:safe_fixtable/2 ?


  A tall, dark stranger will have more fun than you.

More information about the erlang-questions mailing list