EVE Onlineとstackless python

最近、EVE Online (http://www.eve-online.com)をやってます。MMORPGです。EVAでもburst errorでもないです。

これは簡単に言うと宇宙船とか出てくるSFものなんですが、いくつか他のMMORPGにはない特徴があります。

  • 単一サーバに全員が接続する。チャンネルとか別サーバとかそういうのはない
    • 常時2万人程度が接続
    • 中国だけは法律の問題で専用サーバがあるみたいだけど
  • 画面が綺麗でしかも軽い
    • 2004年デビューとは思えないぐらい綺麗
    • 2昔前のグラフィックボードでもサクサク動く
  • ゲーム内の経済は、(ほぼ)すべてユーザが決定
    • 需要と供給で相場が決まる
      • ある品の価格推移グラフとか見れる
    • NPCが販売してるものも多少はあるので、ほぼ

SFという点をいかして、星系ごとにエリアを区切っているようで、だからこそ単一サーバでも大丈夫なんですね。また、ゲーム内経済がユーザだけで完結しているというのは結構すごいことです。なんでも需要と供給のバランスを取るために経済学者を雇ったりしてらしいです。
(http://www.4gamer.net/news/history/2007.06/20070628224101detail.html)

そして、一番の特徴は

ですな。全部じゃないみたいだけど。

2006年のPyConで発表された資料
(http://www.python.org/pycon/2006/papers/12/Stackless%20Python%20in%20EVE2.ppt)
を見ると、stackless pythonを使っているとのこと。stackless python (http://www.stackless.com/)とは、C言語レベルのstackを使わず、自分でstackを用意して使うpythonです。

stackless pythonを詳しく知らないので軽く調べてみました。

stackless pythonには、「Tasklets(microthread)」と「Channel」という二つの特徴的な機能があります。他にもあるみたいだけど。Taskletsはmicrothreadを使いやすくしたものみたいです。Microthreadはthreadのようなものですが、OS natve threadではありません。また、割り込みはありません。

ChannelはTasklets同士の通信に使われるものです。Channelにメッセージを送ったときにblockされているreceiver taskletsがあったときは、そのtasklets は直ちに起きて実行されます。これを使って、Taskletsのスケジューリングでの待ち合わせみたいにも使われます。しかもTaskletsは割り込みがないのでクリティカルセクションとかにも使える。

EVE onlineでは、TaskletsとChannelを使ってうまいスケジューリングを自分で行い、予期しないcontetxt-switchを起こさないようにしているようです。従って競合とか起きにくいし、single-threadのようなプログラミングができる、と資料に書いてあります。また、自分でやってるのでどこがボトルネックかもわかりやすいので高速化もできる、というわけですね。

まあ、ぼく自身もまだ分かってないところが大半ですが、結構おもしろい技術なんじゃないかと。もうちょっと調べてみようかな。

ということで、技術を調査する為に最近夜毎にミッションをやってるわけです。遊びじゃないですよ〜。あと、基本英語なので英語の勉強にいいんです〜。