なんじゃくにっき

プログラミングの話題中心。

2010-11-01から1ヶ月間の記事一覧

Scala de Design Pattern: Fork-Join

Fork-Joinパターン。 大量の処理が必要な問題をFork(分割)して並列処理させ、 実行結果を後でJoin(結合)させる。 JavaのFork-Joinフレームワーク http://gee.cs.oswego.edu/dl/papers/fj.pdf はJDK 7に標準で組み込まれる予定。 futureパターンを使って例を…

Scala de Design Pattern: Producer-Consumer

Producer-Consumerパターン。 http://en.wikipedia.org/wiki/Producer-consumer_problem Producer(生産者)とConsumer(消費者)がいて、 Producerが物を生産し、ConsumerがProducerが生産した物を消費する。 この際、Bufferを経由する。 ProducerはBufferに生…

Scala de Design Pattern: Thread Specific Storage

スレッド毎に固有の記憶領域を割り当てるパターン。 Javaの場合、java.lang.ThreadLocalを用いる。 ScalaのActorはスレッドプール上で動作するので、ActorとThreadは1対1対応ではない。 なのでThreadLocalを用いるわけにはいかない。 呼び出し元のActorの毎…

Scala de Design Pattern: Actor

Aciive Objectパターンとも。 パターン自体の説明は↓を見ればよいと思われます。 http://www.cs.wustl.edu/~schmidt/PDF/Act-Obj.pdf ざっくり言うと、 非同期なメッセージをやりとりするためのオブジェクトで、 以下の6つの要素を持つ。 1. Proxy: 外部に対…

Scala de Design Pattern: Thread Pool

Worker Threadパターンとも。 スレッドの生成はコストが大きいので、 あらかじめ複数のスレッドを生成しておき、貯めておく (この貯められたスレッドの集合をスレッドプールと呼ぶ)。 スレッドが必要になったらスレッドプールからスレッドを呼び出し、 使…

Scala de Design Pattern: Read Write Lock

リソースのReadとReadは衝突しないが、 Read-Write, Write-Writeは衝突する、というパターン。 synchronizedをReadとWriteに付けるだけではRead-Readの衝突を回避できないので、 別にロックを管理するオブジェクトを用いる。 Javaにjava.util.concurrent.loc…

Scala de Design Pattern: Two-Phase Termination

スレッドを直接終了させた場合、クリティカルセクション中の場合問題が出る。 そこで、スレッドを直接終了させるのではなく、 スレッドに終了するように命令して、スレッドがそれを受け取るとスレッドが自分自身で終了する。 JavaでもThread#stop はdeprecat…

Scala de Design Pattern: Future

Futureパターン: 要求を受けたら別のスレッドに処理を委譲して、その場では代わりのオブジェクトを取得する。 その後で、実際の実行結果を受け取る。 その際、別スレッドでの処理が終わってない場合、待ち続ける。 Scalaでは scala.concurrent.ops.futureと…

Scala de Design Pattern: Thread-Per-Message

要求毎にスレッドを生成し、作業は別スレッドで行うパターン。 作業を委譲したらすぐに制御は元のスレッドに戻す。 要求を行うのがClient、 要求を受けるのをHost、 別スレッドで要求を実行するのをHelperと呼ぶらしい(?) Scalaの場合、要求ごとにActorを…

Scala de Design Pattern: Balking

Guarded Suspensionに似ているが、 こちらは要求を受ける側は、キューにメッセージがない場合、待たずに処理を抜ける。 reactの代わりにreactWithinを用いると、待ち時間のタイムアウトをミリ秒単位で設定できる。 引数に0を設定するとメッセージが存在しな…

Scala de Design Pattern: Guarded Suspension

要求を送るオブジェクトと、要求を受けるオブジェクトがあり、 要求は一旦キューを介して受け渡される。 要求を受けるオブジェクトはキューに要求が送られるまで待ち続ける。 Actorを使って実装してみる。 Actorはメッセージボックスというキューを持ってい…

Scala de Design Pattern: Immutable

オブジェクトのインスタンスの状態が変わらないことをImmutable(不変)という。 Scalaでは基本的にImmutableを推奨。 純粋な関数型言語ではオブジェクトは全てImmutable。 このこと自体は並行処理には直接は関わらないが、 オブジェクトがImmutableであると、…

Scala de Design Pattern: Single Threaded Execution

1つのスレッドからしか実行できないパターン。 Critical Sectionパターンとも。 Javaではsynchronizedはキーワードだが、ScalaではAnyRefのメソッド。 なので、Scalaの場合、関数全体を同期化するには 関数の定義にsynchronized修飾子を付けることはできなく…

【メモ】Scalaの記号たち

Scalaのソースを追っていたら変な記号が多くて?な状態になります。 ってことで備忘のためにScalaで使う記号をメモしておきます。 四則演算、剰余 + - * / % ビット否定、論理否定 ~ ! ビット演算 & | ^ && || 比較 = ブロック {} コメント // …このへんまで…

Atndから参加者リストを取得して抽選するアプリ Scala Swing編

前回Scala勉強会in渋谷用のくじびきアプリをAndroidで作ったが、 http://d.hatena.ne.jp/nanjakkun/20101120/1290211247 これを実行するためだけにAndroidエミュレータをインストールのはちょっと…という人のために Scala Swing用に翻案してみた。 こんなの↓

勉強会用くじAndoroidプログラム

Scala勉強会in渋谷のページにてくじびきアプリを誰か作れ!というのを発見したので作ってみた。 http://atnd.org/events/9889#comment Andoroidじゃなくてスクリプト版はid:xuweiさんが作ってくれていたので、大分助かった。 http://d.hatena.ne.jp/xuwei/20…

Scala + Androidをsbt(Simple Build Tool) とEclipseを併用して開発

Scala + Androidで開発されている方はちらほら居て、ブログや勉強会で発表されている。 先週もScala勉強会in渋谷第11回でid:shomah4aさんが発表されたのを聞いてきた。 http://scala-users.org/shibuya/index.php?title=%E5%8B%89%E5%BC%B7%E4%BC%9A%E7%AC%A…