マルチスレッド
『増補改訂版Java言語で学ぶデザインパターン入門マルチスレッド編』を読んだ。 Javaマルチスレッドはすごいと。Java見直した。がrubyもしゅごい Single Threaded Execution - この橋を渡れるのは、たった一人 Immutable - 壊したくとも、壊せない Guarded S…
Rubyで結城浩せんせいのJavaマルチスレッド本 その14 # activeobject rubyで書いた。 長いので折りたたみ #!/usr/bin/env ruby module ActiveObject require "thread" class MethodRequest def initialize( servant,future ) @servant = servant @future =…
Rubyで結城浩せんせいのJavaマルチスレッド本 その13 # thread specific storage スレッド毎の領域 スレッド毎に排他的なストレージ領域。スレッドはそれを使ってるのを知らない。 rubyで実装 Logを書くだけのモノ #!/usr/bin/env ruby # ThreadSpecific S…
Rubyで結城浩せんせいのJavaマルチスレッド本 その12 #Two-Phase termination 仕事中のスレッドを止める スレッドに例外を通知する。 フラグ waitしてるかも 例外 どこでキャッチしてるか分からない 2段階の終了 終了リクエスト受付 安全性を考慮して終…
Rubyで結城浩せんせいのJavaマルチスレッド本 その11 Future 引換券 番号札を持ってお席でお待ちください 重要なのは、「席でお待ちください」ってことで。席で待ってたら届くと言うこと。必要になれば取りに行って待つことも出来るが。。。(balking/guard…
Rubyで結城浩せんせいのJavaマルチスレッド本 その10 Worker-thread worker-thread thread-pool- Background-thread とも呼ばれる woker の役割 仕事が届いたら仕事する。 仕事がなければ、仕事が来るまでまつ。 細かい制御をしてチューニングして使う。 W…
Rubyで結城浩せんせいのJavaマルチスレッド本 8 # Read-Write Lock 読込中は書かない。 ログファイルのFlushとか、MySQLだとSELECT for UPDATE ってところか。 rubyで書いてみた #!/usr/bin/env ruby require 'thread' # Read Write Lock class ReadWriteLo…
Rubyで結城浩せんせいのJavaマルチスレッド本 7# Producer-and-Consumer Producer-and-Consumer 回転寿司だと思えば楽。作る人、食べる人、カウンターテーブル。が別々に仕事をする。 作るひとはどんどん作り 食べる人がどんどん食べる。 テーブルにお寿司…
Rubyで結城浩せんせいのJavaマルチスレッド本をやってみる試み、その5 Balking Balkinは待たずに、他の仕事を片付けます。一方でGuarded SuspensionはWaitセットで待つ。Balking は先に進みます。 Guarded Suspensionのこんなところが嫌なので、Balkingパタ…
Rubyで結城浩せんせいのJavaマルチスレッド本をやってみる試み、その5 Guarded Suspension Guarded Suspensionはガード条件が満たされるまで while (your_trun?) { wait() } で まつ。 2本スレッドで、キューを使う クライアント:リクエストをキューに置…
Rubyで結城浩せんせいのJavaマルチスレッド本をやってみる試み、その4 Immutable パターン #/usr/bin/envy ruby #Immutable # 壊れない設計 class PrintPersonThread < Thread def initialize person @person = person block = Proc.new{ while true do put…
結城せんせいの「マルチスレッド本」を参考書にし、これをRubyで解釈する。 Rubyもデザインパターンも両方覚えちゃおうという強欲な試み。 Single Threaded Execution 壊れてしまう例 #!/usr/bin/env ruby #Single Threaded Execution #これは壊れる例 requi…
Rubyでマルチスレッドを動かしてみる。 Rubyでスレッドを動かす例 #/usr/bin/env ruby #Threadで動かしてみる puts "スレッドテスト" puts "スレッド作成" t = Thread.new { puts "Thread 開始" sleep 3 puts "Thread 終了" } puts "他スレッド待ち" main_th…
Rubyのスレッド関連Doc Rubyのスレッド関連の情報リンクをまとめてみた。公式Docも添付ライブラリ・標準ライブラリ・コアと3種類あったりして探すのが面倒。 コア スレッド Ruby スレッド Ruby のスレッドの仕様 スレッドと例外 組み込みクラス Thread libra…