Go言語とRuby(Rails)の処理速度比較

こんにちは、株式会社PentagonでエンジニアをしているYamatoです。一般的にスクリプト言語に比べてコンパイル言語のほうが早いとされています。ですので、処理速度を重視するのであればGo言語あたりが良いのではとおすすめをしたのはいいものの実際に検証をしていないなと思い、検証してみることにしました。Hello worldを表示する程度のDockerコンテナを用いて比較をします。実際コーディングするのはHello world程度でも面倒なので、以下のリポジトリをお借りしました。本来の検証では同等のものを用意するのがベストだと思います。https://github.com/qorbani/docker-golang-hello-worldhttps://github.com/brightbox/docker-rails-hello-world
本編とは関係ありませんが、apt updateを行うときに以下のエラーが発生しました。署名の検証を行う処理で問題が起きていたので--allow-unauthenticatedをつけて実行しましたが、エラーが解消しませんでした。Docker DesktopのPreferences→Resources→Disk image sizeを拡張することで解消しました。

 InRelease' is not signed

検証結果

# golang
  Thread Stats   Avg      Stdev     Max   +/- Stdev
   Latency     5.02ms   41.35ms   1.01s    99.51%
   Req/Sec   608.99    238.44     1.18k    64.04%
 71795 requests in 1.00m, 8.90MB read
Requests/sec:   1195.28
Transfer/sec:    151.74KB

# rails
Thread Stats   Avg      Stdev     Max   +/- Stdev
   Latency   298.50ms  137.98ms   1.17s    76.92%
   Req/Sec    14.46      7.08    40.00     83.87%
 1606 requests in 1.00m, 4.78MB read
 Socket errors: connect 0, read 4, write 0, timeout 0
 Non-2xx or 3xx responses: 6
Requests/sec:     26.75
Transfer/sec:     81.44KB​

検証ツールはwrkですbrew install wrkでインストールが可能です。(自分の環境では依存関係やupdateの関係でインストールに1時間かかりました...)2スレッド、同時接続数10、1分間負荷をかけるように指定しています。go言語の場合約7万2000でRailsは1600のリクエストでした。45倍!...ですが、処理の構成的には同等と言えるものではないのであくまで簡単なテスト結果としてこれだけの差があるということです。Railsはフレームワークなのでruby単体の処理速度というわけではありません。簡単な出力をする(API)+処理速度の観点からコンパイル言語のほうが早いという結果でした。

採用情報はこちら
目次