2007年 12月 07日

Twisted

正直にいうとごくごく最近まで MochiKit Deferred の由来が Twisted (Pythonの非同期ライブラリ) からきていると知らなかった……
Python のマルチスレッドってどうなってるんだろう。threading/thread とかがヒットする。

Ruby のスレッドはなんか頭つかわなくても書けるなぁ。なんでだろう……あと Ruby で Deferred は必要か、っていうのが微妙に最近ひっかかる。なんで Ruby には Deferred がないんだろう (つまり、なんでなくてもいいやって思えるんだろう)

JS だとスレッドがなくて、しかもいちいちブラウザに処理をもどさないと固まってしまうから Deferred がすごい威力を発揮するけど、スレッドがあったときに、Deferred はどう活躍するんだろう。(Python にはスレッドがあるっぽいけど、なんで Deferred が必要になったんだろう)

Ruby だと非同期な HTTP GET をやるなら

require "open-uri" # net/http はめんどいから

t = Thread.start do
	open("http://example.com/") {|f|
		f.read
	}
end

p t.value

みたいになって、複数あつめてやるのをスレッドつかってかくと

require "open-uri"

t1 = Thread.start do
	open("http://example.com/") {|f|
		f.read
	}
end

t2 = Thread.start do
	open("http://example.com/") {|f|
		f.read
	}
end


[t1.value, t2.value].each do |i|
	p i.length
end

さらにつなげていこうとすると大変? そうでもない気がする。うーん

最初から非同期なやつだと (ぱっとでてこない)、めんどいかなぁ……

いやいやそもそも Deferred は非同期なやつをほげほげするやつなんだ。

Ruby だと非同期なメソッドがあんまりないから気にならないのかなぁ。