diff options
author | Raimo Niskanen <[email protected]> | 2018-11-28 15:59:00 +0100 |
---|---|---|
committer | Raimo Niskanen <[email protected]> | 2019-01-14 17:18:18 +0100 |
commit | 63a7892d0fbcd6463a21ba54622e61cf4a935b64 (patch) | |
tree | 1b409874e3a34128fef38957693996074bd2be87 /lib/stdlib/src/ets.erl | |
parent | a5c1cd352976d58577516c6d7b1db45c30f908ab (diff) | |
download | otp-63a7892d0fbcd6463a21ba54622e61cf4a935b64.tar.gz otp-63a7892d0fbcd6463a21ba54622e61cf4a935b64.tar.bz2 otp-63a7892d0fbcd6463a21ba54622e61cf4a935b64.zip |
Optimize gen_statem engine loop
* Use synchronolus cancel_timer since that is more efficient
than asynchronous when a process cancels its own timer
* Restructure the state to have fewer fields by breaking
out practically constant fields into a separate
loop argument record #params{}, group state and data
into one field and dito for timer fields
* Optimize engine loop arguments for staying in the loop so
the detour to sys:handle_system_message/6 will require
packing/unpacking of the sys: state, and of the argument Parent
* Avoid double reverse of event queue in many cases
* Restructure the state transition to not have duplicate
tracks for sys_debug and non-sys_debug cases
* Shortcut the empty list case where possible
* Loop unroll reversal of up to 2-element lists to avoid calling
lists:reverse/2 since an external call spills all live
registers to the stack
* Bring out the callback mode check to the engine loop
Diffstat (limited to 'lib/stdlib/src/ets.erl')
0 files changed, 0 insertions, 0 deletions