Pull to refresh

Сравнительная скорость выполнения элементарных операций в Ruby и Jruby. Сравнение циклов

Reading time3 min
Views2.3K
Доброго времени суток.
image
Если кому-то интересно узнать о скорости выполнения элементарных операций в Ruby и Jruby, а так же скорость циклов «for», «while», «times» то вам

Кто не знает что такое Ruby, Jruby.
Информация из ru.wikipedia.org

Ruby — динамический, рефлективный, интерпретируемый язык высокого уровня для быстрого и удобного объектно-ориентированного программирования.( ru.wikipedia.org/wiki/Ruby )

JRuby — интерпретатор языка программирования Руби, написанный целиком на Java (оригинальный интерпретатор написан на Си). ( ru.wikipedia.org/wiki/JRuby )

Под «элементарными» операциями я понимаю: «сложение», «вычитание»(хотя в обзор не включил), «умножение», «деление». Не могу сказать, что сделал всё правильно(вероятно есть то, о чем я не знаю), хотелось бы услышать об ошибках. Важно заметить, что нельзя сравнивать «сложение», «умножение», «деление» относительно друг друга, так как разное число итераций.

Тест проходил следующим образом:
1) Имеется 9 файлов-скриптов: [3 цикла] х [3 элементарные операции]. Другими словами: «сложение» в цикле «for», «сложение» в цикле «while», «сложение» в цикле «times», «умножение» в цикле «for» и так далее.
2) Выполняется каждый файл 10 раз – 5 раз для ruby и 5 раз для jruby.
3) Результаты заносятся в таблицу.
4) Делаются выводы.

Конфигурация компьютера:
Ноутбук Asus eeepc 900
Процессор: Intel Celeron 353 ULV на частоте 900MHz
Оперативная память: 1Gb RAM DDR2 PC3200
Debian Squeeze
ruby 1.8.7
jruby 1.4.0

Код(###### — разделитель файлов):
Copy Source | Copy HTML
  1. ################################################
  2. x = 1_000_000
  3. a = Time.new
  4. 1_000_000.times do
  5.     x -= 3
  6. end
  7. b = Time.new
  8. puts b - a
  9. ################################################
  10. x = 1
  11. a = Time.new
  12. for i in 1..1_000_000 do
  13.     x += 3
  14. end
  15. b = Time.new
  16. puts b - a
  17. ################################################
  18. x = 1
  19. i =  0
  20. a = Time.new
  21. while i < 1_000_000 do
  22.     x += 3
  23.     i += 1
  24. end
  25. b = Time.new
  26. puts b - a
  27. ################################################
  28. x = 1
  29. a = Time.new
  30. 10_000.times do
  31.     x *= 3
  32. end
  33. b = Time.new
  34. puts b - a
  35. ################################################
  36. x = 1
  37. a = Time.new
  38. for i in 1..10_000 do
  39.     x *= 3
  40. end
  41. b = Time.new
  42. puts b - a
  43. ################################################
  44. x = 1
  45. i =  0
  46. a = Time.new
  47. while i < 10_000 do
  48.     x *= 3
  49.     i += 1
  50. end
  51. b = Time.new
  52. puts b - a
  53. ################################################
  54. x = 3**10_000
  55. a = Time.new
  56. 10_000.times do
  57.     x /= 3
  58. end
  59. b = Time.new
  60. puts b - a
  61. ################################################
  62. x = 3**10_000
  63. a = Time.new
  64. for i in 1..10_000 do
  65.     x /= 3
  66. end
  67. b = Time.new
  68. puts b - a
  69. ################################################
  70. x = 3**10_000
  71. i =  0
  72. a = Time.new
  73. while i < 10_000 do
  74.     x /= 3
  75.     i += 1
  76. end
  77. b = Time.new
  78. puts b - a
  79. ################################################ 


Результаты:

image

image

image

Цикл “times” использовать выгоднее при сложении.
image

Цикл “while” использовать выгоднее при умножении.
image

При делении для ruby — “times”, для jruby – “while”
image

В итоге нельзя сказать, что JRuby или Ruby «быстрее», для вычитания результаты примерно эквиваленты сложению. Наверно эта диаграма вводит в заблуждение — «сложение», «умножение», «деление» на одном графике, но количество повторений в циклах разное, нужно смотреть «сложение» Ruby vs «сложение» JRuby, «умножение» Ruby vs «умножение» JRuby и то же самое с «делением».
image

Нельзя забывать, что «Из Ruby кода в JRuby можно вызывать классы Java, таким образом можно получить доступ ко всем библиотекам, инфраструктурам и инструментам платформы Java. Также можно получить доступ к Ruby коду из Java. Имеется поддержка большинства встроенных классов, BSF[1].

Стандартное использование JRuby — это его встраивание в Java приложение для поддержки скриптинга и ускорения разработки, что является преимуществом языка Ruby перед статическими языками. Также может использоваться для запуска Rails-приложений на Java-платформах.» — ru.wikipedia.org/wiki/JRuby
Tags:
Hubs:
Total votes 8: ↑4 and ↓40
Comments9

Articles