Go言語の実行速度は速いのか?他の言語と比べてみました

19/02/18 10:56:00     19/04/08 10:35:15

Goって速いの?

Go言語は速度が速いと言われており、実際に比較されたデータも公表されています。結論を先に言ってしまうと、速度比較の結果Go言語は最速の場合もあれば、2番目くらいのこともあります。絶対的王者という速度ではありませんが、平均的に見て申し分ない速さということです。

JavaやPythonと比較されているケースが多いですが、Javaとは良い勝負です。Pythonには圧勝です。このページでは、なぜGo言語の実行速度が速いのか、また他の言語と比べてどのくらい速度が速いのか、といったことを解説していきます。

なぜGo言語の実行速度は速いのか

Go言語の実行速度が速い理由はいくつかありますが、特に大きな要因としては並行処理とコンパイルの形態です。まず並行処理に関してですが、Go言語はプログラマーが意識せずとも自動的に複数処理を同時に行うよう設計されています。

Go言語はコードの種類が極端に制限されていますが、それも内部での処理を簡易化し、並行処理を容易にするためです。また goroutine、channelといった機能があり、goroutineはGo言語の軽量なスレッド、chanelはgoroutineとgoroutineが通信するための方法です。

これらの機能があることで、Go言語はより軽量、高速になっていますgoroutineとchanelは処理を高速化させることはもちろん、どちらも軽いです。同時に数千個動かしてもメモリを圧迫することがないので、機能がかえって重くしてしまうようなこともありません。

ちなみに、goroutineのサンプルコードは以下です。

package main

import (
    "fmt"
    "time"
)
func say(s string) {
    for i := 0; i < 5; i++ {
        time.Sleep(100 * time.Millisecond)
        fmt.Println(s)
    }

}

func main() {
    go say("world")
    say("hello")
}

そしてGo言語はコンパイル時にJavaのように中間言語に変換しないため、コンパイルが速いです。中間言語に一回変換するよりも直接機械語に変換した方が効率的で、Go言語は極力効率的な方法を採用しています。

Go言語と他の言語の速度比較

Go言語と他の言語のコンパイル速度比較を行ったデータが存在します。比較データの詳細については後述しますが、まずは結果から以下のようになっています。

・Go言語
1回目 541.38秒
2回目 546.18秒
3回目 543.36秒

・C言語
1回目 563.23秒
2回目 563.32秒
3回目 561.96秒

・Java
1回目 543.91秒
2回目 543.08秒
3回目 541.13秒

・Python
1回目 18時間程度
2回目 18時間程度
3回目 18時間程度

C言語やJavaに比べると、Go言語の方がやや速度が速いです。Pythonに関しては遅すぎです。というかGo言語の速さよりもPythonの遅さの方が際立っているかと思います。またコンパイラの条件は以下です。

・Go言語
go1.7.3

・C言語
gcc 4.8.5

・Java
jdk 1.8.0_111

・Python
Python 2.7.5

そして実行したソースコードは以下です。

・Go言語

package main

import (
    "fmt"
    "time"
    "strconv"
)

const MAX = 1000000

func main() {
    count := 0

    start := time.Now()

    for pri := 2; pri <= MAX; pri++ {
        for no := 2; no <= pri; no++ {
            if (pri == no) {
                fmt.Println(pri)
                count++
            } else if (pri % no == 0) {
            break;
            }
        }
    }

    end := time.Now()
    delta := (end.Sub(start)).Seconds()

    fmt.Println("見つかった素数の数は" + strconv.Itoa(count) + "個です。")
    fmt.Println("かかった時間は" + strconv.FormatFloat(delta, 'f', 8, 64) + "秒です。")
}

長くなるのでその他の言語は割愛しますが、Go言語で実行している内容と同じ条件のコードが書かれています。結果的に言えばPythonと比較すると明らかに速いのですが、JavaやC言語と比較すると気にするほどの速度差ではないと言えるでしょう。

他にもGo言語と他のプログラミング言語の速度比較を行ったデータがありますが、だいたい同じような結果になっています。Javaとは良い勝負をしており、C言語と比べると平均的にやや勝っています。

いろいろなところでGo言語は処理速度が速いということやその根拠が説明されていますが、結果から見ると過大評価と言えなくもないかと思います。たしかにGo言語の速度は速いのですが、他のプログラミング言語に比べて圧倒的に速いかというとそうではありません。

Go言語誕生の背景

速度も含めてGo言語にはいくつかのメリットがあるのですが、なぜそのようなメリットがあるのか、といったことを考えるにはGo言語誕生の背景を知るのが良いです。理由としては、Go言語はGoogleの内部課題を解決するために生まれた言語だと言われているからです。

Goは2006年に始まったGoogleの内部プロジェクトで使用開始され、2009年に一般にリリースされています。もともとリリース予定だったのか内部で使っていて結果的にリリースに至ったのかはわかりませんが、Google内部の問題を解決する狙いがあったことはほぼ間違いないでしょう。

Googleは検索エンジンを含めていろいろな情報を内密にしているので確証はありませんが、検索エンジンは速ければ速い方が良いです。Go言語は速度にメリットがありますが、検索エンジンを高速化する狙いがあったのではないかということです。

上の結果ではJavaやC言語と速度に大差なかったのですが、処理内容によってはGo言語が圧倒的なパフォーマンスを発揮する可能性もあるのかもしれません。検索エンジンの高速化が狙いの一つであるなら、他の言語より処理速度が速くないと意味がないからです。

Googleの検索エンジンのソースコードは当然公開されていないので何とも言えませんが、そういった処理でGoの実力が最大限発揮される可能性があるということですね。またGo言語の開発者は、「Cの速度とPythonの生産性を両立したい」と話しています。

結果的にPythonの生産性が実現できているかどうかはわかりませんが、少なくともC言語の速度は実現できています。むしろC言語よりも速度が速いという結果が出ています。

まとめ

以上、Go言語の実行速度について解説してきました。「Go言語が他の言語に比べて圧倒的に高速だ」とまでいうのは買いかぶりかもしれませんが、最速を争う速度であることは間違いありません。

速度を速くするための軽量化、コードのシンプル化に徹底的に力を入れており、コードについては場合によってはユーザーが不便を感じるレベルです。というのもライブラリやツールが充実しているのでコードの少なさをカバーできていますが、手書きしようとすると不便を感じることもあるのです。

結論として、Go言語はメリットとデメリットを知ったうえで使用することで最大限のパフォーマンスを発揮できると言えます。

案件量が豊富なアルマサーチ

アルマサーチ

最後に、アルマサーチのご紹介!

アルマサーチはフリーランス向けに案件をご紹介することに特化したエージェントサービスです。豊富な案件量から、安定して継続的な案件のご紹介を実現しており、口コミから登録エンジニアが急増中です。

アルマサーチが選ばれる理由

  1. 豊富な案件量。週3〜4日の案件や在宅リモート案件も。
  2. 優秀なコンサルタント陣。
  3. 案件に参画後もしっかりサポート。

豊富な案件量

フリーランス向けに特化し、業界屈指の案件量を誇ります!週3〜4日の案件や、在宅リモート案件もありますし、その他あらゆる希望をしっかりお伝えください。最適な案件のご紹介をさせていただきます。

優秀なコンサルタント陣

技術に疎く、開発の希望を伝えても響かないエージェント・・・嫌ですよね。アルマサーチにはそのような者は一切おりません!さらに独立にまつわる税金や保険関係に詳しいスタッフが徹底的にサポートさせていただきます。

案件に参画後もしっかりサポート

常駐先が決まった瞬間に、一度も連絡が取れなくなるエージェント・・・いますよね?アルマサーチでは、そのようなことは一切ありません!常に電話やメールは即対応しますし、月に1度のランチミーティングなどから現場の状況を細かくヒアリングし、就業環境改善に尽力いたします。

相談する

▼Go言語関連の記事 
1, 【Go言語の求人・案件情報】特徴やメリット、採用している会社やエンジニア開発単価まで
2, 【Go言語入門】Go言語を初めて学ぶ人がチェックしたい学習サイト5選
3, Go言語の特徴とできることを、現役プログラマに聞いてみた
4, Go言語のフレームワークをそれぞれ比較してみました
5, 未経験者におすすめのGo言語の書籍5選
6, Go言語でjsonを使う時に気をつけておきたい4つのこと
7, Go言語の開発環境をWindowsで構築する方法まとめ
8, なぜPythonからGo言語にスキルチェンジする人が多いのか?
9, (この記事)Go言語の実行速度は速いのか?他の言語と比べてみました
10, Go言語は難しい?スキルチェンジしたエンジニアに聞いてみた

人気記事

編集部おすすめ記事

この記事を読んだ人はこんな記事を読んでいます

案件探しやフリーランスになるための相談する