アーカイブ
このサイトは?
本サイトでは、チームの技術調査の成果を(いささかの遊びごころを盛り込みつつ)順次掲載していきます。 現在、WordPress等のブログ/CMSと連携する、新世代の分散webサイト(Java/.NETを含む)の構築に関する調査及び、次世代のプログラミング教育環境に関する調査を展開中です。
東北楽天ゴールデンイーグルスファン在籍。
お問い合わせ先
supportあっとwordprogress.org (担当・赤坂)
ランダムリンク集
RandomLinks@bit.ly
以下、実験中 :
既に多くの人が述べている通り、新プログラミング言語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クローンなどの実装も出てきているので、ライブラリの現況は、調べがつきしだいまとめサイトにて順次公開していきたい。

