rubyでマルチスレッド

昨日perlでスレッド使えてすげえすげえと書いたわけだけど、どうもこのithreadというやつはOSレベルのスレッドなんだな。私はlinuxで使ってるのでpthreadというかlinuxthreadというかつまりアレですね。このlinuxのスレッドというのはもの凄くいい加減な作りになっていて、manの通りに動かなかったりとかとにかく行儀がわるい。使うときは細心の注意を払って隙の無いように、慎重に実装しなきゃならない類のものなわけで。

そこでふと思うのです。おれ何やってんだろう、と。

高々スクリプト言語でペチペチやってるときになんでこんな神経使わないといかんのよ。手軽に使えるのがスクリプト言語の存在意義でしょと。やめやめ。

一方rubyのスレッド実装はユーザスレッドだそうで。つまり見せかけのスレッド。同時に実行されるスレッドは一つのみであり、そのプリエンプションはrubyインタプリタのなかで独自に行われると。はっきり言って、これで何の不自由もないです。うちのCPUはシングルコアだしさ。

これ、プロセス全体で見るとマルチIOをselectで非同期制御しているソフトとやってることは変わらないんだけど、使いやすいし十分強力なスレッド機能だと思うわけです。まさにスクリプト向きです。

よくスレッドはOSレベルで実装されてこそ本物だとかいう意見をブログで読んだりするけど、こいつらは脳みそ腐ってるんじゃないだろうか。複数コアを使わないから遅いだとかいうけど、複数コアをつかわないと遅くて困るような用途って何なんだ。計算したいなら最初からCを使えCを。そんなくだらない目的のためにユーザスレッドなんてダメダメといって結局トラブルを呼び込む不届き者は豆腐の角に頭をぶつけて死ぬべきである。

《追記》