Actorを学ぶ

Actorがまだよくわからない。インターネットで検索したり色んな人のブログを見たりしてもまだよくわからない。
APIを見てもtraitのActorとobjectのActorがあってうんにゃかもんにゃかだ。

JavaのThreadクラスみたい

objectのActorはひとまず置いといて、traitのActorから攻めてみよう。
これはなんだかJavaのThreadクラスみたいな感じだ。
actメソッドを実装してstartメソッドを呼ぶと、actメソッドの中身が非同期に実行されるみたい。

ちょっとやってみよう

Actorを継承したオブジェクトを定義する。actメソッドの中身は1秒sleepしてから「アクション!」と出力するようにしておく。

import scala.actors.Actor

object MyActor extends Actor {
  def act = {
    Thread.sleep(1000)
    println("アクション!")
  }
}

actを直接呼ぶと(1秒待ってから「アクション!」と出力)が3回繰り替えされる。

object HelloActor {
  def main(args:Array[String]) = {
    for(i <- 1 to 3) MyActor.act
  }
}

startを呼ぶと、1秒待った後に「アクション!」が3行一気に出力されて終了する。

object HelloActor {
  def main(args:Array[String]) = {
    for(i <- 1 to 3) MyActor.start
  }
}

よし、ここまでは分かった。

本家サイトのチュートリアル

本家サイトにActorのチュートリアルがあった。どういうわけか全編英語で書かれてるので何がなんだかさっぱりわからない。Excite翻訳とスペースアルクの力を借りて、日本語に変換しながら読んでみる。

Scala Actors: A Short Tutorial

Introduction


With the advent of multi-core processors concurrent programming is becoming indispensable. Scala's primary concurrency construct is actors. Actors are basically concurrent processes that communicate by exchanging messages. Actors can also be seen as a form of active objects where invoking a method corresponds to sending a message.

The Scala Actors library provides both asynchronous and synchronous message sends (the latter are implemented by exchanging several asynchronous messages). Moreover, actors may communicate using futures where requests are handled asynchronously, but return a representation (the future) that allows to await the reply.

This tutorial is mainly designed as a walk-through of several complete example programs that can be readily compiled and run using Scala 2.4 or newer.

チュートリアル


マルチコアプロセッサが到来して並列プログラミングは不可欠になっています。Scalaの主要な同時並行性の構成概念はactorsです。Actorsってのは要するにメッセージを交換することによって交信する並行処理です。メッセージ送信がメソッド呼び出しに対応する場合、Actorsはアクティブオブジェクトのフォームのようにも見えます。(?)
ScalaのActorsライブラリは非同期と同期両方のメッセージ送信を提供します(後者は、いくつかの非同期なメッセージを交換することによって、実行されます)。そのうえ、actorsは、要求が非同期に処理されるところで先物取引を使用することで交信するかもしれませんが、それで回答をお待ちしている表現(未来)を返してください。(!?)
このチュートリアルは、主にScala2.4以降ですぐにコンパイルして実行できるいくつかの完全なプログラム例の段階的な説明として設計されました。

Actorsってのは要するにメッセージを交換することによって交信する並行処理です。
ここだけ理解できた。素晴らしい。
2本の線がお互いパスしながら平行して進んでいくような感じなんだな。マルチスレッドプログラミングとかいうアレだな。


後はなんだかよくわからなかった。
なんでいきなり先物取引の話になるんだ?
なにかの例えなのか?
アメリカンジョークなのか?
もうだめだ。ジャンプ買ってこよう。