---
type: article
title: Ruby使いもCPUの知識はあった方がよい
timestamp: 2007-09-16T00:00:00Z
profile: sorane-okf/0.1
noFontEmbedding: true
---

# Ruby使いもCPUの知識はあった方がよい

<p>うーん微妙。一般にThreadを使う理由として、n個あるCPUを効率的に使いたいといった意図がある場合があるが、<a class="keyword" href="http://d.hatena.ne.jp/keyword/Ruby">Ruby</a>は今のところネイティブスレッドをサポートしていないのでThreadを使ったコードを書いても複数CPUを利用できない。<a href="#f-272bd4df" name="fn-272bd4df" title="matzrubyの話。YARVでネイティブスレッドをサポートするようだし、JRubyやIronRubyについても調べてみなきゃ">*1</a>

<br />
複数CPUを効率的に使う必要があれば、<a class="keyword" href="http://d.hatena.ne.jp/keyword/Java">Java</a>でも<a class="keyword" href="http://d.hatena.ne.jp/keyword/Python">Python</a>でもいいけどネイティブスレッドに対応した言語で書くとか、<a class="keyword" href="http://d.hatena.ne.jp/keyword/Ruby">Ruby</a>を使うならThreadを使わず複数プロセスで実装してプロセス間通信を行うとか、そういう工夫が必要となる。<br />
やはり<a href="http://blog.hatena.ne.jp/shi3z/">id:shi3z</a>さんが論じているように、最適化のためには一通りのレイヤに対して一定の知識を持っていないと解けない問題が少なからずあるのではないか。<br />
弾さんの指摘するように「知っていると得」と、「知らなければ駄目」の間はあまりに離れているのだが、落とし穴はあちこちに空いていて、落ちた当人は往々にして何にハマったのかさえ気づかないものだ。</p>
<blockquote cite="http://blog.livedoor.jp/dankogai/archives/50910559.html" title="404 Blog Not Found:マシン語読みの言語知らず"><p>階層が一段違うが、例えば<a class="keyword" href="http://d.hatena.ne.jp/keyword/perl">perl</a>なら、fork()<a class="keyword" href="http://d.hatena.ne.jp/keyword/%A5%B7%A5%B9%A5%C6%A5%E0%A5%B3%A1%BC%A5%EB">システムコール</a>がない<a class="keyword" href="http://d.hatena.ne.jp/keyword/Windows">Windows</a>上でもfork()関数が使えたり、<a class="keyword" href="http://d.hatena.ne.jp/keyword/Ruby">Ruby</a>なら<a class="keyword" href="http://d.hatena.ne.jp/keyword/POSIX">POSIX</a> threadに頼らずともThread.newできたりといった具合だ。<a class="keyword" href="http://d.hatena.ne.jp/keyword/perl">perl</a>や<a class="keyword" href="http://d.hatena.ne.jp/keyword/ruby">ruby</a>を書くのにCPUの知識は必要だが、<a class="keyword" href="http://d.hatena.ne.jp/keyword/perl">perl</a>や<a class="keyword" href="http://d.hatena.ne.jp/keyword/ruby">ruby</a>で書くのに、CPUの知識は必須ではない。</p>
</blockquote><div class="footnote">
<p class="footnote"><a href="#fn-272bd4df" name="f-272bd4df" class="footnote-number">*1</a><span class="footnote-delimiter">:</span><span class="footnote-text">matzrubyの話。<a class="keyword" href="http://d.hatena.ne.jp/keyword/YARV">YARV</a>でネイティブスレッドをサポートするようだし、<a class="keyword" href="http://d.hatena.ne.jp/keyword/JRuby">JRuby</a>や<a class="keyword" href="http://d.hatena.ne.jp/keyword/IronRuby">IronRuby</a>についても調べてみなきゃ</span></p>
</div>
