aboutsummaryrefslogtreecommitdiffstats
path: root/erts/emulator/beam/atom.names
diff options
context:
space:
mode:
authorBjörn Gustavsson <[email protected]>2018-10-04 10:30:05 +0200
committerBjörn Gustavsson <[email protected]>2018-11-06 10:01:23 +0100
commit805748eb668d5562fe17f3172cdae07a86166c3f (patch)
tree8f1081edbd3f002dc7171a59f47d5b201097e47b /erts/emulator/beam/atom.names
parent7d92a5c7be185e549bdd8ad56524d2bd3f9479a6 (diff)
downloadotp-805748eb668d5562fe17f3172cdae07a86166c3f.tar.gz
otp-805748eb668d5562fe17f3172cdae07a86166c3f.tar.bz2
otp-805748eb668d5562fe17f3172cdae07a86166c3f.zip
Add a persistent term storage
Persistent terms are useful for storing Erlang terms that are never or infrequently updated. They have the following advantages: * Constant time access. A persistent term is not copied when it is looked up. The constant factor is lower than for ETS, and no locks are taken when looking up a term. * Persistent terms are not copied in garbage collections. * There is only ever one copy of a persistent term (until it is deleted). That makes them useful for storing configuration data that needs to be easily accessible by all processes. Persistent terms have the following drawbacks: * Updates are expensive. The hash table holding the keys for the persistent terms are updated whenever a persistent term is added, updated or deleted. * Updating or deleting a persistent term triggers a "global GC", which will schedule a heap scan of all processes to search the heap of all processes for the deleted term. If a process still holds a reference to the deleted term, the process will be garbage collected and the term copied to the heap of the process. This global GC can make the system less responsive for some time. Three BIFs (implemented in C in the emulator) is the entire interface to the persistent term functionality: * put(Key, Value) to store a persistent term. * get(Key) to look up a persistent term. * erase(Key) to delete a persistent term. There are also two additional BIFs to obtain information about persistent terms: * info() to return a map with information about persistent terms. * get() to return a list of a {Key,Value} tuples for all persistent terms. (The values are not copied.)
Diffstat (limited to 'erts/emulator/beam/atom.names')
-rw-r--r--erts/emulator/beam/atom.names3
1 files changed, 3 insertions, 0 deletions
diff --git a/erts/emulator/beam/atom.names b/erts/emulator/beam/atom.names
index 45b7540aeb..82bb620d62 100644
--- a/erts/emulator/beam/atom.names
+++ b/erts/emulator/beam/atom.names
@@ -182,6 +182,7 @@ atom control
atom copy
atom copy_literals
atom counters
+atom count
atom cpu
atom cpu_timestamp
atom cr
@@ -287,6 +288,7 @@ atom gc_minor_end
atom gc_minor_start
atom Ge='>='
atom generational
+atom get_all_trap
atom get_seq_token
atom get_tcw
atom gather_gc_info_result
@@ -325,6 +327,7 @@ atom index
atom infinity
atom info
atom info_msg
+atom info_trap
atom init
atom initial_call
atom input