Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
Powered by Rabbit 2.1.8
Rubyのパフォーマンスは
どこまで上げられるか。
あるいはRubyは
本当に遅いのか?
Rubyアソシエーション 理事長
ネットワーク応用通信研究所
Heroku
まつもとゆきひろ
@yukih...
Powered by Rabbit 2.1.8
 
Railsアプリ開発経験
Powered by Rabbit 2.1.8
 
ゼロ (or 1)
Powered by Rabbit 2.1.8
 
Rubyは本当に遅いのか
Powered by Rabbit 2.1.8
 
「遅い」を定義せよ
Powered by Rabbit 2.1.8
 
エンジニアは感覚と勘で
仕事してはいけない
Powered by Rabbit 2.1.8
 
Premature optimization is the
root of all evil
Donald Knuth
Powered by Rabbit 2.1.8
 
早すぎる最適化は諸悪の根源
ドナルド・クヌース
Powered by Rabbit 2.1.8
 
どの程度速い必要があるか
Powered by Rabbit 2.1.8
 
どの程度コストをかけられるか
Powered by Rabbit 2.1.8
 
生産性が重要
Powered by Rabbit 2.1.8
 
最重要は「たのしいプログラミング」
Powered by Rabbit 2.1.8
 
パフォーマンス最重要は昔の話
Powered by Rabbit 2.1.8
 
たのしく(速く)開発して
Powered by Rabbit 2.1.8
 
必要最低限速くする
Powered by Rabbit 2.1.8
 
パフォーマンスチューニングの鉄則
Powered by Rabbit 2.1.8
 
パレートの法則
Powered by Rabbit 2.1.8
 
80:20則
Powered by Rabbit 2.1.8
 
実行時間の8割は
2割の部分で消費される
Powered by Rabbit 2.1.8
 
実行時間の5%占める部分を
超高速化しても全体は
95%にしかならない
Powered by Rabbit 2.1.8
 
ボトルネックしか意味がない
Powered by Rabbit 2.1.8
 
エンジニアは感覚と勘で
仕事してはいけない
Powered by Rabbit 2.1.8
 
パフォーマンスチューニングの鉄則2
Powered by Rabbit 2.1.8
 
測定
Powered by Rabbit 2.1.8
 
数値
Powered by Rabbit 2.1.8
 
遅くなる様々な要素
Powered by Rabbit 2.1.8
 
処理系の遅さ(Rubyの遅さ)
Powered by Rabbit 2.1.8
 
アルゴリズムの遅さ
Powered by Rabbit 2.1.8
 
データベースの遅さ
Powered by Rabbit 2.1.8
 
メモリの遅さ
Powered by Rabbit 2.1.8
 
GCの遅さ
Powered by Rabbit 2.1.8
 
測定
Powered by Rabbit 2.1.8
 
数値
Powered by Rabbit 2.1.8
 
原因が明らかなら解決は
(比較的)簡単
Powered by Rabbit 2.1.8
 
パフォーマンスチューニングの鉄則3
Powered by Rabbit 2.1.8
 
まずアルゴリズムを検討
Powered by Rabbit 2.1.8
 
その他の改善手段とは
桁(オーダー)が違う
Powered by Rabbit 2.1.8
 
O(ビッグ・オー)記法
Powered by Rabbit 2.1.8
 
O(n^2)
Powered by Rabbit 2.1.8
 
O(n・log(n))
Powered by Rabbit 2.1.8
 
O(1)
Powered by Rabbit 2.1.8
 
パフォーマンスチューニングの鉄則4
Powered by Rabbit 2.1.8
 
自分で仕事しない
Powered by Rabbit 2.1.8
 
ライブラリルーチンに任せる
Powered by Rabbit 2.1.8
 
Rubyのライブラリコードは
最適化されてる(ことが多い)
Powered by Rabbit 2.1.8
 
Cで実装されているものも多い
Powered by Rabbit 2.1.8
 
自分でCで実装するよりも
工夫されてる(≒高速)
Powered by Rabbit 2.1.8
 
パフォーマンスチューニングの鉄則5
Powered by Rabbit 2.1.8
 
オブジェクトアロケーションを避ける
Powered by Rabbit 2.1.8
 
メモリ問題
Powered by Rabbit 2.1.8
 
GC問題
Powered by Rabbit 2.1.8
 
文字列リテラル
Powered by Rabbit 2.1.8
 
部分文字列
Powered by Rabbit 2.1.8
 
コピーを避ける
Powered by Rabbit 2.1.8
 
例:長い文字列
Powered by Rabbit 2.1.8
 
正規表現+インデックス
vs
部分文字列
Powered by Rabbit 2.1.8
 
ボトルネックに限定する
Powered by Rabbit 2.1.8
 
パフォーマンスチューニングの鉄則6
Powered by Rabbit 2.1.8
 
新しいRubyを使う
Powered by Rabbit 2.1.8
 
2.2
Powered by Rabbit 2.1.8
 
2.3
Powered by Rabbit 2.1.8
 
0.1ごとに5〜10%改善
Powered by Rabbit 2.1.8
 
金利より高い率
Powered by Rabbit 2.1.8
 
GCの改善
Powered by Rabbit 2.1.8
 
メモリアロケーションの改善
Powered by Rabbit 2.1.8
 
メソッド呼び出しの改善
Powered by Rabbit 2.1.8
 
高い互換性
Powered by Rabbit 2.1.8
 
まとめ
Powered by Rabbit 2.1.8
 
高速化は目的じゃない
Powered by Rabbit 2.1.8
 
まず測定する
Powered by Rabbit 2.1.8
 
ボトルネックを見つける
Powered by Rabbit 2.1.8
 
より良いアルゴリズムを検討
Powered by Rabbit 2.1.8
 
自分で仕事しない
Powered by Rabbit 2.1.8
 
オブジェクトアロケーションを避ける
Powered by Rabbit 2.1.8
 
新しいRubyを使う
Powered by Rabbit 2.1.8
 
パフォーマンスチューニングは楽しい
Powered by Rabbit 2.1.8
 
目的を見失う
Powered by Rabbit 2.1.8
 
CRubyコア開発へようこそ
Powered by Rabbit 2.1.8
 
ありがとうございました1
Upcoming SlideShare
Loading in …5
×

Rubyのパフォーマンスはどこまで上げられるか。あるいはRubyは本当に遅いのか?

4,355 views

Published on

まつもとゆきひろ@yukihiro_matz
2015年10月31日(土)
「Matzから、Rubyパフォーマンスのポイントを教えてもらおう!会議」
http://connpass.com/event/21132/

Published in: Engineering
  • Sex in your area is here: ♥♥♥ http://bit.ly/36cXjBY ♥♥♥
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
  • Dating direct: ♥♥♥ http://bit.ly/36cXjBY ♥♥♥
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here

Rubyのパフォーマンスはどこまで上げられるか。あるいはRubyは本当に遅いのか?

  1. 1. Powered by Rabbit 2.1.8 Rubyのパフォーマンスは どこまで上げられるか。 あるいはRubyは 本当に遅いのか? Rubyアソシエーション 理事長 ネットワーク応用通信研究所 Heroku まつもとゆきひろ @yukihiro_matz Yukihiro "Matz" Matsumoto
  2. 2. Powered by Rabbit 2.1.8   Railsアプリ開発経験
  3. 3. Powered by Rabbit 2.1.8   ゼロ (or 1)
  4. 4. Powered by Rabbit 2.1.8   Rubyは本当に遅いのか
  5. 5. Powered by Rabbit 2.1.8   「遅い」を定義せよ
  6. 6. Powered by Rabbit 2.1.8   エンジニアは感覚と勘で 仕事してはいけない
  7. 7. Powered by Rabbit 2.1.8   Premature optimization is the root of all evil Donald Knuth
  8. 8. Powered by Rabbit 2.1.8   早すぎる最適化は諸悪の根源 ドナルド・クヌース
  9. 9. Powered by Rabbit 2.1.8   どの程度速い必要があるか
  10. 10. Powered by Rabbit 2.1.8   どの程度コストをかけられるか
  11. 11. Powered by Rabbit 2.1.8   生産性が重要
  12. 12. Powered by Rabbit 2.1.8   最重要は「たのしいプログラミング」
  13. 13. Powered by Rabbit 2.1.8   パフォーマンス最重要は昔の話
  14. 14. Powered by Rabbit 2.1.8   たのしく(速く)開発して
  15. 15. Powered by Rabbit 2.1.8   必要最低限速くする
  16. 16. Powered by Rabbit 2.1.8   パフォーマンスチューニングの鉄則
  17. 17. Powered by Rabbit 2.1.8   パレートの法則
  18. 18. Powered by Rabbit 2.1.8   80:20則
  19. 19. Powered by Rabbit 2.1.8   実行時間の8割は 2割の部分で消費される
  20. 20. Powered by Rabbit 2.1.8   実行時間の5%占める部分を 超高速化しても全体は 95%にしかならない
  21. 21. Powered by Rabbit 2.1.8   ボトルネックしか意味がない
  22. 22. Powered by Rabbit 2.1.8   エンジニアは感覚と勘で 仕事してはいけない
  23. 23. Powered by Rabbit 2.1.8   パフォーマンスチューニングの鉄則2
  24. 24. Powered by Rabbit 2.1.8   測定
  25. 25. Powered by Rabbit 2.1.8   数値
  26. 26. Powered by Rabbit 2.1.8   遅くなる様々な要素
  27. 27. Powered by Rabbit 2.1.8   処理系の遅さ(Rubyの遅さ)
  28. 28. Powered by Rabbit 2.1.8   アルゴリズムの遅さ
  29. 29. Powered by Rabbit 2.1.8   データベースの遅さ
  30. 30. Powered by Rabbit 2.1.8   メモリの遅さ
  31. 31. Powered by Rabbit 2.1.8   GCの遅さ
  32. 32. Powered by Rabbit 2.1.8   測定
  33. 33. Powered by Rabbit 2.1.8   数値
  34. 34. Powered by Rabbit 2.1.8   原因が明らかなら解決は (比較的)簡単
  35. 35. Powered by Rabbit 2.1.8   パフォーマンスチューニングの鉄則3
  36. 36. Powered by Rabbit 2.1.8   まずアルゴリズムを検討
  37. 37. Powered by Rabbit 2.1.8   その他の改善手段とは 桁(オーダー)が違う
  38. 38. Powered by Rabbit 2.1.8   O(ビッグ・オー)記法
  39. 39. Powered by Rabbit 2.1.8   O(n^2)
  40. 40. Powered by Rabbit 2.1.8   O(n・log(n))
  41. 41. Powered by Rabbit 2.1.8   O(1)
  42. 42. Powered by Rabbit 2.1.8   パフォーマンスチューニングの鉄則4
  43. 43. Powered by Rabbit 2.1.8   自分で仕事しない
  44. 44. Powered by Rabbit 2.1.8   ライブラリルーチンに任せる
  45. 45. Powered by Rabbit 2.1.8   Rubyのライブラリコードは 最適化されてる(ことが多い)
  46. 46. Powered by Rabbit 2.1.8   Cで実装されているものも多い
  47. 47. Powered by Rabbit 2.1.8   自分でCで実装するよりも 工夫されてる(≒高速)
  48. 48. Powered by Rabbit 2.1.8   パフォーマンスチューニングの鉄則5
  49. 49. Powered by Rabbit 2.1.8   オブジェクトアロケーションを避ける
  50. 50. Powered by Rabbit 2.1.8   メモリ問題
  51. 51. Powered by Rabbit 2.1.8   GC問題
  52. 52. Powered by Rabbit 2.1.8   文字列リテラル
  53. 53. Powered by Rabbit 2.1.8   部分文字列
  54. 54. Powered by Rabbit 2.1.8   コピーを避ける
  55. 55. Powered by Rabbit 2.1.8   例:長い文字列
  56. 56. Powered by Rabbit 2.1.8   正規表現+インデックス vs 部分文字列
  57. 57. Powered by Rabbit 2.1.8   ボトルネックに限定する
  58. 58. Powered by Rabbit 2.1.8   パフォーマンスチューニングの鉄則6
  59. 59. Powered by Rabbit 2.1.8   新しいRubyを使う
  60. 60. Powered by Rabbit 2.1.8   2.2
  61. 61. Powered by Rabbit 2.1.8   2.3
  62. 62. Powered by Rabbit 2.1.8   0.1ごとに5〜10%改善
  63. 63. Powered by Rabbit 2.1.8   金利より高い率
  64. 64. Powered by Rabbit 2.1.8   GCの改善
  65. 65. Powered by Rabbit 2.1.8   メモリアロケーションの改善
  66. 66. Powered by Rabbit 2.1.8   メソッド呼び出しの改善
  67. 67. Powered by Rabbit 2.1.8   高い互換性
  68. 68. Powered by Rabbit 2.1.8   まとめ
  69. 69. Powered by Rabbit 2.1.8   高速化は目的じゃない
  70. 70. Powered by Rabbit 2.1.8   まず測定する
  71. 71. Powered by Rabbit 2.1.8   ボトルネックを見つける
  72. 72. Powered by Rabbit 2.1.8   より良いアルゴリズムを検討
  73. 73. Powered by Rabbit 2.1.8   自分で仕事しない
  74. 74. Powered by Rabbit 2.1.8   オブジェクトアロケーションを避ける
  75. 75. Powered by Rabbit 2.1.8   新しいRubyを使う
  76. 76. Powered by Rabbit 2.1.8   パフォーマンスチューニングは楽しい
  77. 77. Powered by Rabbit 2.1.8   目的を見失う
  78. 78. Powered by Rabbit 2.1.8   CRubyコア開発へようこそ
  79. 79. Powered by Rabbit 2.1.8   ありがとうございました1

×