Ubuntu : Intel® Q6600® one core |
Each chart bar shows how many times more Time or how many times more Memory one unidentified ↓ thread-ring program used, compared to the program that used least Time or the program that used least Memory.
This table shows 5 measurements - CPU Time, Elapsed Time, Memory, Code and ~ CPU Load.
Compare how much Memory the thread-ring programs used - sort Memory KB. Compare how much Code the programs used - sort Code B
Column × shows how many times more each program used compared to the program that used least.
| sort | sort | sort | sort | |||
|---|---|---|---|---|---|---|
| × | Program Source Code | CPU secs | Elapsed secs | Memory KB | Code B | ~ CPU Load |
| 1.0 | C GNU gcc #3 | 5.12 | 5.12 | 16,760 | 607 | 0% 0% 0% 100% |
| 1.5 | Erlang HiPE | 7.90 | 7.91 | 5,628 | 273 | 0% 0% 99% 0% |
| 1.7 | Haskell GHC #3 | 8.59 | 8.60 | 2,936 | 274 | 0% 0% 0% 100% |
| 3.1 | Mozart/Oz | 15.88 | 15.88 | 4,068 | 340 | 0% 0% 0% 100% |
| 4.1 | Go 6g 8g #3 | 21.03 | 21.03 | 3,048 | 347 | 0% 0% 0% 100% |
| 4.1 | Go 6g 8g | 21.10 | 21.10 | 3,084 | 309 | 0% 0% 0% 100% |
| 4.9 | Java 6 -server #4 | 24.94 | 24.96 | 120,964 | 894 | 0% 0% 0% 100% |
| 7.1 | Smalltalk VisualWorks #2 | 36.13 | 36.13 | 13,084 | 566 | 0% 0% 0% 100% |
| 15 | Pascal Free Pascal | 77.28 | 77.28 | 2,560 | 523 | 0% 0% 0% 100% |
| 18 | Scheme PLT | 91.17 | 91.17 | 19,672 | 262 | 0% 0% 0% 100% |
| 20 | ATS | 100.77 | 100.76 | 4,604 | 1090 | 0% 0% 0% 100% |
| 20 | C GNU gcc | 101.45 | 101.45 | 4,540 | 487 | 0% 0% 0% 100% |
| 20 | C GNU gcc #2 | 102.60 | 102.59 | 2,532 | 575 | 0% 0% 0% 100% |
| 20 | C++ GNU g++ #2 | 102.73 | 102.73 | 5,124 | 588 | 0% 0% 0% 100% |
| 23 | OCaml #2 | 116.42 | 116.42 | 4,964 | 350 | 0% 0% 0% 100% |
| 23 | Scala | 117.68 | 117.69 | 64,372 | 339 | 0% 0% 0% 100% |
| 24 | OCaml #3 | 122.46 | 122.45 | 2,968 | 296 | 0% 0% 0% 100% |
| 30 | C++ GNU g++ | 154.43 | 154.42 | 3,124 | 636 | 0% 0% 0% 100% |
| 31 | Python CPython #2 | 156.21 | 156.20 | 7,200 | 287 | 0% 0% 0% 100% |
| 31 | Python 3 #2 | 158.01 | 158.00 | 8,356 | 288 | 0% 0% 0% 100% |
| 31 | Go 6g 8g #2 | 159.09 | 159.08 | 3,156 | 333 | 0% 0% 0% 100% |
| 41 | Java 6 -server #3 | 208.83 | 208.85 | 118,032 | 530 | 0% 0% 0% 100% |
| 45 | Lisp SBCL #2 | 230.50 | 230.49 | 58,724 | 571 | 0% 0% 0% 100% |
| 51 | Ada 2005 GNAT #2 | 263.46 | 263.45 | 8,928 | 560 | 0% 0% 0% 100% |
| 53 | Java 6 -Xint #3 | 269.64 | 269.64 | 29,368 | 530 | 0% 0% 0% 100% |
| 55 | C# Mono | 282.61 | 282.60 | 11,396 | 476 | 0% 0% 0% 100% |
| 58 | Ada 2005 GNAT | 298.11 | 298.10 | 8,796 | 602 | 0% 0% 0% 100% |
| 71 | Ruby JRuby | 6 min | 6 min | 96,696 | 342 | 0% 0% 0% 100% |
| 72 | F# Mono | 6 min | 6 min | 13,148 | 472 | 0% 0% 0% 100% |
| 78 | OCaml | 6 min | 6 min | 5,628 | 282 | 0% 0% 0% 100% |
| 88 | Perl #3 | 7 min | 7 min | 489,092 | 489 | 0% 0% 0% 100% |
| 92 | Ruby JRuby #2 | 7 min | 7 min | 97,136 | 228 | 0% 0% 0% 100% |
| 169 | Java 6 -Xint #4 | 14 min | 14 min | 42,104 | 894 | 0% 0% 0% 100% |
| 304 | Ruby MRI #2 | 25 min | 25 min | 10,252 | 228 | 0% 0% 0% 100% |
| 569 | Ruby MRI | 48 min | 48 min | 8,396 | 342 | 0% 0% 0% 100% |
| Lisaac | Make Error | 810 | ||||
| Lisp SBCL | Timed Out | 1h 00 min | 618 | |||
| Perl | Timed Out | 2h 00 min | 353 | |||
| Ruby 1.9 #2 | Failed | 228 | ||||
| Ruby 1.9 | Failed | 342 | ||||
| interesting alternative programs | ||||||
| 0.3 | Java 6 -server #6 | 1.25 | 1.37 | 105,336 | 543 | |
| 0.7 | Lua LuaJIT #3 | 3.74 | 3.75 | 904 | 264 | |
| 0.9 | Lua LuaJIT #2 | 4.52 | 4.52 | 920 | 284 | |
| 1.0 | Java 6 -server #2 | 5.14 | 5.17 | 47,428 | 693 | |
| 1.1 | Lua LuaJIT | 5.81 | 5.82 | 952 | 255 | |
| 2.5 | Java 6 -server #5 | 12.87 | 12.91 | 119,856 | 432 | |
| 3.1 | Lua #2 | 15.79 | 15.79 | 1,296 | 284 | |
| 3.1 | Lua #3 | 16.05 | 16.05 | 1,272 | 264 | |
| 3.3 | Lua | 16.82 | 16.82 | 1,328 | 255 | |
| 3.7 | Python CPython #3 | 18.97 | 18.97 | 3,100 | 272 | |
| 3.9 | Python 3 #3 | 20.09 | 20.10 | 4,172 | 270 | |
| missing programs | ||||||
| Clean | No program | |||||
| Fortran Intel | No program | |||||
| Java 6 steady state | No program | |||||
| JavaScript TraceMonkey | No program | |||||
| JavaScript V8 | No program | |||||
| Lua | No program | |||||
| Lua LuaJIT | No program | |||||
| PHP | No program | |||||
diff program output N = 1000 with this output file to check your program is correct before contributing.
Each program should create and keep alive 503 threads, explicity or implicitly linked in a ring, and pass a token between one thread and the next thread at least N times.
Each program should
Similar benchmarks are described in Performance Measurements of Threads in Java and Processes in Erlang, 1998; and A Benchmark Test for BCPL Style Coroutines, 2004. For some language implementations increasing the number of threads quickly results in Death by Concurrency.
Programs may use kernel threads, lightweight threads; but coroutines, cooperative threads and other programs with custom schedulers will be listed as interesting alternative implementations. Briefly say what concurrency technique is used in the program header comment.