Posted to tcl by sebres at Wed Jul 15 11:32:53 GMT 2020view pretty
proc test_fifo {l} { timerate { set l [linsert $l [set l 0] x]; set l [lreplace $l [set l 0] 0] } } proc test_lilo {l} { timerate { lappend l x; set l [lreplace $l [set l end] end] } } set c 1000 while {$c <= 1e6} { puts "** $c **" puts fifo:\t[test_fifo [lrepeat $c a]] puts lilo:\t[test_lilo [lrepeat $c a]] set c [expr {$c * 10}] } # Results: # ---------------------------------- # Tcl 8.5: # ---------------------------------- # ** 1000 ** # fifo: 0.815292 µs/# 1189045 # 1226554 #/sec 969.419 net-ms # lilo: 0.319608 µs/# 2895810 # 3128836 #/sec 925.523 net-ms # ** 10000 ** # fifo: 4.296829 µs/# 231345 # 232729 #/sec 994.050 net-ms # lilo: 0.316483 µs/# 2922252 # 3159727 #/sec 924.843 net-ms # ** 100000 ** # fifo: 44.1857 µs/# 22619 # 22631.7 #/sec 999.437 net-ms # lilo: 0.316588 µs/# 2921358 # 3158682 #/sec 924.866 net-ms # ** 1000000 ** # fifo: 519.944 µs/# 1924 # 1923.3 #/sec 1000.373 net-ms # lilo: 0.317124 µs/# 2916790 # 3153344 #/sec 924.983 net-ms # ---------------------------------- # Tcl 8.6: # ---------------------------------- ** 1000 ** fifo: 0.704807 µs/# 1338218 # 1418827 #/sec 943.186 net-ms lilo: 3.795696 µs/# 260543 # 263456 #/sec 988.942 net-ms ** 10000 ** fifo: 4.236343 µs/# 233711 # 236052 #/sec 990.080 net-ms lilo: 35.7963 µs/# 27903 # 27935.9 #/sec 998.823 net-ms ** 100000 ** fifo: 43.6455 µs/# 22890 # 22911.9 #/sec 999.046 net-ms lilo: 570.914 µs/# 1752 # 1751.6 #/sec 1000.241 net-ms ** 1000000 ** fifo: 507.387 µs/# 1971 # 1970.9 #/sec 1000.059 net-ms lilo: 5640.94 µs/# 178 # 177.28 #/sec 1004.088 net-ms
Comments
Posted by sebres at Wed Jul 15 11:42:18 GMT 2020 [text] [code]
It looks like [lappend] is responsible for this performance degradation: - proc test_lilo {l} { timerate { lappend l x; set l [lreplace $l [set l end] end] } } + proc test_lilo {l} { timerate { set l [linsert $l [set l end] x]; set l [lreplace $l [set l end] end] } } solves that for 8.6. WiP.