Ruby 1.9 は、Ruby 1.8 (MRI) とは異なり、ネイティブ スレッドを使用します。
しかし、Ruby 1.9.3 にネイティブ スレッドの代わりにグリーン スレッドを作成するようお願いすることはできますか?
--
なぜ私はそれが欲しいのですか?
テスト目的のため。
結果を返す前に数秒間スリープする数千の同時接続を受け入れる単純なTCPサーバーを作成しようとしています。
Ruby 1.8 では、何千ものスレッドを簡単に作成できるため、同時接続数の唯一の制限は OS です。
Ruby 1.9 では、それは不可能に思えます。
このコードは、私が何を意味するかを示しています。
require 'thread'
m = Mutex.new
c = 0
ta = Array.new 10000
ta.fill do
Thread.new do
m.synchronize { c += 1; p "created #{c}th" if c%100 == 0; }
sleep 15
m.synchronize { c -= 1; p "destroyed #{c+1}th" if c%100 == 0; }
end
end
ta.each {|t| t.join}
Ruby 1.8 では問題なく動作しますが、1.9 では非常に悲惨です。
--
残念ながら、eventmachine をいくつか試した結果、思いついadd_timer
たのは Node.js サーバーでした。
var http = require('http');
http.createServer(function (req, res) {
res.writeHead(200, {'Content-Type': 'text/plain'});
setTimeout(function() {res.end('Hello World\n');}, 10000 );
}).listen(8081, '127.0.0.1');
console.log('Server running at http://127.0.0.1:8081/');
誰かが EventMachine で同じことを実証できれば、その答えを喜んで受け入れます。