meideru blog

家電メーカーで働いているmeideruのブログです。主に技術系・ガジェット系の話を書いています。

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言語の特徴

  1. 開発効率
  2. 実行速度
  3. 実行環境

の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で実験します。

さくらのVPSの料金・仕様一覧のご案内です。root権限付きのVPSサービスが月額685円(税込)からご利用いただけます。VPSはさくらインターネットの「さくらのVPS」をご利用ください。2週間の無料お試しも実施しています。

 

このサイトの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言語は音速のスピードで動くと思っていたのですが・・・。

 

次の記事

前回の記事の続きです。 前回、「Go言語の実行速度を他の言語と比較してみた」という記事を書きました。その記事では、Javaが1番速く、C言語は3番目でそこまで速くないという結論が出ました。実は、この記事に対して指摘がありましたので、今日は改めて再実験をしてみました。前回の実験のまとめ再実験の前に、前回の実験を振り返ってみましょう。(詳しく知りたい人は関連リンクをご覧ください。)比較した4つの言語Go言語、C言語、Java、Pythonの4つで行いました。実験方法1から1,000,000までの素数を求めるプログラムを実...

 - 技術系