Go言語の実行速度を他の言語と比較してみた
最近、Go言語に没頭しています。
Go言語には「実行速度が高速である」というメリットがあります。
Go言語の実行速度とは、どれくらい速いのでしょうか?
今日はそれを確かめるために、Go言語を含めた色々な言語でプログラムを書いて、実行速度を試してみようと思います。
目次
スポンサーリンク
Go言語とは
本題に入る前に、Go言語について説明しようと思います。
Wikipediaの説明
Goはプログラミング言語のひとつ。Googleによって開発されており、設計にロブ・パイク、ケン・トンプソンらが関わっている。
主な特徴として、軽量スレッディングのための機能、Pythonのような動的型付け言語のようなプログラミングの容易性、などがある。Go処理系としてはコンパイラのみが開発されている。
発表当初はLinuxとMac OS Xのみしかサポートしていなかったが、2012年3月にリリースされたバージョン1.0からはWindowsもサポートされている。2014年12月にリリースされたバージョン1.4からAndroidをサポートし、2015年8月19日にリリースされたバージョン1.5からiOSをサポートしている。また、2011年5月10日に公開された Google App Engine 1.5.0 でも、Go言語がサポートされている。
(Wikipediaの「Go言語(プログラミング言語)」より引用)
Go言語の特徴
- 開発効率
- 実行速度
- 実行環境
の3つです。
開発効率とは、Pythonのようにライブラリが豊富という意味です。
実行速度とは、C言語やC++のように高速で動くという意味です。
実行環境とは、色々なプラットフォームで動くという意味です。
実行速度の比較実験をしてみよう
なぜ実験を行うのか
開発効率や実行環境については、凄さが十分わかりました。
Pythonまでとは言えないものの、多くのライブラリが既に存在していて、開発効率は良いでしょう。
現時点でもLinux、Windows、OS X、FreeBSD、Windows、Android、iOSなど様々なプラットフォームで動作するので、実行環境も申し分ないでしょう。
しかし、実行速度については実感できていません。
そこで、色々な言語で同じプログラムを書いて、実験してみようと思いました。
実験方法
1から1,000,000までの素数を求めるプログラムを実行し、完了するまでにかかった時間を計測します。これを計3回ずつ行います。
プログラムは、Go言語、C言語、Java、Pythonで4つで書きます。
アルゴリズムは古典的なものを使用します。また、並列処理などは一切使用しません。
実験環境(PC)
私が借りているさくらインターネットのVPSで実験します。
このサイトの1GBプランのVPSを契約しています。
スペック表の通り、CPUは仮想2Core、メモリ1GBです。
因みに、なぜ自宅のPCを使わないのかと言うと、電気代がもったいないからですw
素数を計算で大量に求めるわけですから、そこそこの時間と電気代がかかると思われます。自宅のPCでやるのは嫌ですよねw
実験環境(コンパイラ)
以下の環境でコンパイルしました。
言語名 | コンパイラ名 |
Go言語 | go1.7.3 |
C言語 | gcc 4.8.5 |
Java | jdk 1.8.0_111 |
Python | Python 2.7.5 |
注意事項
VPSであるので、CPUなどのリソースは共有です。時間帯などによって、処理性能が変動することがあります。
何が言いたいのかと申しますと、本実験はあくまで参考程度にしてください。
ある程度の誤差があると思われます。
ソースコード
各々のソースコードは、GitHubに貼りましたので、そちらをご覧ください。
https://github.com/meideru/PrimeSpeedTest
実験結果
実験結果は以下の通りでした。
言語名 | 1回目 | 2回目 | 3回目 |
Go言語 | 541.38秒 | 546.18秒 | 543.36秒 |
C言語 | 563.23秒 | 563.32秒 | 561.96秒 |
Java | 543.91秒 | 543.08秒 | 541.13秒 |
Python | 18時間程度 | 18時間程度 | 18時間程度 |
Pythonの遅さは予想通り
予想通り、Pythonは鈍足でした。ライブラリが汎用なだけで実行速度は出ていません。
C言語が予想よりも遅い!!
C言語が1番速いと思っていたのですが、実際はGo言語とJavaよりも遅い結果でした。
あれ!?C言語遅くね!?
やり方が間違っているのでしょうか?
Javaが想像以上に速かった
Javaが予想以上に高速でした。
一昔前までは「Javaは遅くて使い物にならない」などと言われていましたが、実際はC言語よりも速い結果となりました。
Go言語は速い
Go言語も速かったですね。
ライブラリも増えてきてますし、使われることも多くなるだろうと思いました。
まとめ
今回は「素数をひたすら求める」というプログラムで速度を比較しましたが、別の方法でやれば結果は変わるのかもしれません。
それと、予想以上にC言語が遅くてビックリしました。
C言語は音速のスピードで動くと思っていたのですが・・・。
次の記事
スポンサーリンク
関連記事