Go towards a Word-Progress

   ~言霊とプログラム言語の共進化!?

11月/09

14

プログラミング言語Goのライブラリ ①web/http周り with ベンチマーク紹介

既に多くの人が述べている通り、新プログラミング言語Go、Google謹製らしく、ライブラリが結構充実している。better Cとして使おうと思うと、ライブラリの実のところが気になるところ。少しずつ見ていきたい。

まずうれしいのが、インターネット時代の新言語らしく、httpやjsonなど、web向きのライブラリが相当整備されていること。

例えば、Package http 。その名の通り、httpプロトコルを扱うためのメソッドがごっそり定義されている。例題も載せてくれている。エラー処理まで含めたwebサーバの例を、ほぼそのまま引用する。

package main

import (
	"http";
	"io";
)

// hello world, the web server
func HelloServer(c *http.Conn, req *http.Request) {
	io.WriteString(c, "ようこそ、Go言語へ!\n");
}

func main() {
	http.Handle("/hello", http.HandlerFunc(HelloServer));
	err := http.ListenAndServe(":8080", nil);
	if err != nil {
		panic("ListenAndServe: ", err.String())
	}
}

実際にwebサーバを立てるときには、Handleメソッド等でURIパターンを定義していくことになる。これだけ簡潔だとRubyのsinatraクローンのようなものがすぐに作れそうだ。

そして、ListenAndServeメソッドに注目しておきたい。この1メソッドだけで、同時アクセス対応・エラー処理の定義ができている。内部のソースを追いかけられていないが、おそらくgoメソッドによるgoroutine化(≒マルチスレッド化、でいいのかな)がなされているものと思われる。

簡潔にwebサーバが書けることが分かったところで、気になるのはそのパフォーマンス。週末にちょっくらサーバを立ててみて・・・と思っていたのだが、もう既に比較調査をしてくれている方がいた。しかも、Nginx, Erlang , Java mina2とGo webサーバのパフォーマンスを比較、といういきなりワールドシリーズばりの豪華メンバーでの比較である!!

※ロシア製NginxがApacheより高パフォーマンスであることはけっこう知られつつあると思うが、Javaのmina2(現在RC-1)もApacheより高パフォーマンスである(・・・というか、そのライブラリがTwitterのメッセージングインフラを支えている@Scala経由でね)

・・・で、注目の結果がこちら。やはりNginxは速いが、mina2がそれを押さえてトップの模様(Erlangやや影薄し)。そして、Goの簡易webサーバ(上のものとほぼ同じ)もさほど差のないパフォーマンスを出している(・・一桁遅いとかいうことはないレベル)。生まれたてのGo言語ではあるが、今後が非常に楽しみとなる(まずは、自らの手でパフォーマンスを検証したい)。

※別件だが、Scala使い(やや無理くりGoとScalaを比較した記事)としては、mina2を用いた実装に俄然興味がわいた。TwitterのScala Geekががんがんコードを公開してくれいてるし。

ということで、Goのweb周りのライブラリはすでにそこそこ良い感じ。既に、Goのmemcacheクローンなどの実装も出てきているので、ライブラリの現況は、調べがつきしだいまとめサイトにて順次公開していきたい。

RSS Feed

<<

>>

トップに戻る

  Copy Right © Team WordProgress. All Rights reserved.