ヽ(´・肉・`)ノログ

How do we fighting without fighting?

並列処理との出会い

毎日何の不満もなく CRuby を使っていた.

ある日 HTTP 経由で数十のファイルをダウンロードするクライアント処理を書くことになった. 素直に処理を書くと,ダウンロードを繰り返すので待たされる.

IO 待ちが多いプログラムは CRuby でもマルチスレッドで解消するというのは聞いたことがあった. そこで興味本位で Thread.start を使って並列に処理してみようと思いたった.

確かこんな感じの素朴な Ruby コードを書いた.

urls.map { |url|
  Thread.start(url) { |u| Net::HTTP.get(u) }
}.map { |t| t.join }

実行すると,なんと今までは待たされていた処理がそこそこ速く終わるのだ. スレッドをうまく扱えたこと,処理が速く終わるように便利にできたこと,喜びを二重に味わったのだった.

そのうち Java の仕事で Netbeans フレームワークを使ったデスクトップアプリケーションを書くようになり, Executor を使った(Threadよりは)高級なプログラミングで並行処理が楽にできることを覚えていった.

Java並行処理プログラミングという本が良かった覚えがあるのだが,現在は絶版のようだ. もう手に入らないのだろうか.

また「ムーアの法則は近い将来終わる」というのがニュースで言われていたので, 「なるほど,これからは複数コアを簡単に使えるようなプログラミングが求められるのだな.これからは並行処理が書きやすい言語/ライブラリが必要になる」と考えはじめたのだった.

このエントリーをはてなブックマークに追加