• 締切済み

Rubyのスレッド

スレッドを組んでプログラムングをしたいと思います. 1つのプログラムで生成するスレッド数はCPUの数と等しくしないと効率的じゃないと聞きました. 実際のOSの処理はたくさんのプログラムが走ってるのでスレット数はCPU数と関係ないような気がするのですが,実際のところ等しい方が効率的なのでしょうか?

  • Ruby
  • 回答数1
  • ありがとう数10

みんなの回答

  • notnot
  • ベストアンサー率47% (4848/10262)
回答No.1

別にCPUの数を気にする必要は無いです。 例外的に「入出力をほとんど行わず、膨大な計算を行う処理を、並行処理を行うことで処理時間を縮めようとするとき」には、CPUの数を気にします。身近な例としては、動画ファイルの形式変換とか。

関連するQ&A

  • スレッドの意味

    マルチスレッドについて良い資料が見当たらず、教えて下さい。 OSにおけるマルチスレッドと言うと、同一プロセス内でメモリ空間を 共有して独立に動く一連の手続き、と捉えています。(シングルCPU シングルコアだとOSで時分割によって作られた仮想的な並列計算) Javaのようなマルチスレッドのプログラミング言語では「一つの プログラムから作られた二つの一連の手続き」と言うイメージが あります。※裏側の動作ではOSに依頼してJavaのプロセス内で OSのスレッドを生成して処理を渡しているだけ?と思っています。 CPUコアの内部で説明される「マルチスレッド」と言うのは、 どのようなレベルのスレッド(何が並列処理?何処まで並列?) なのでしょうか。

  • マルチスレッド:スレッドの終了を検知する(Ruby)

    2つ以上のスレッドを生成・動作させ、それらが終了した時点で、メインに処理を移すといったことをRubyでしたいと思っています。 (スレッドが1つならば、メインをstopさせておき、スレッドの終了時に例外処理などを使ってrunさせる方法は思いつくのですが。。) 一つ考えたのは・・・ カウンタ変数をつくり、一つのスレッドが終了したらその値を増やす。 メインではwhileループによってその値を常に数えて、全スレッドの終了を把握する。 ただ無駄にwhileループを回してしまいます。。 一般的な効率の良い手段等あるのでしょうか?

  • スレッドを効率的に使うとは?

    C言語&C++で、pthreadを利用して、ファイルのコンバートをいかに早くできるかに挑戦します。 たとえば、CPUが2つある場合。 スレッドが1つだと、CPUの50%の性能しか出ない。だから、二つ目のスレッドを使うという風に理解しています。スレッドを二つ使うことで、100%CPUの力を引き出せる。 しかし、スレッドはCPUの数以上に、生成できるという風にも理解しています。もちろん上限はある。 ただし、その場合は2つのCPUをある時間単位でくぎって、スレッドにふりわけて使い回しをする。 ということは、フルにCPUを最速で使いたい場合は、CPUの数だけスレッドを生成して利用するという理解でいいでしょうか? また、大きなファイルの場合、ファイルにメモリに読み込んで二つにわけて、2つのスレッドを同時に走らせてはやく終わらせるということも可能なのでしょうか?おそらく、RAWのデータならできるけど、何かフォーマットがあるものは難しそうですね。

  • スレッド

    スレッドを生成し、データのやり取りを行うプログラムを作成しようとしているのですが、使用関数が分かりません。 どなたか、ご存知でしたら、お教えください。 スレッドの作成関数はpthread_createを使うことは分かりました。 そこからデータを送る、受けるのやり方がわかりません。 プログラムの流れ スレッドを生成し、スレッドにデータを送る。 そのスレッド内で、データを調べ期待値だったらACK、 それ以外だったら、errorを返すといった感じです。 まだスレッドに関して知識が薄い為、質問も分かりづらいと思いますが、宜しくお願い致します。

  • スレッドを再生成する方法

    VBからC言語DLLを呼ぶプログラムを作っています。 DLLでスレッドを生成しているのですが、 VBから1回目の呼び出しではうまく動作するのですが、2回目はスレッドが生成されません。 2回目は1回目のスレッドが終了してから呼び出しているのですがなにか処理が必要なのでしょうか? スレッドは_beginthreadexで生成してスレッド関数内のreturnで終了しています。 closehandleを追加してみましたが駄目でした。

  • 「スレッド」の概念について質問

    スレッドとは、「1つのプログラムにおいての1つの処理(メソッド)」のことで、これはシングルスレッドともよぶ。 マルチスレッドは、複数の処理を「同時に実行する」こと。但し、実際にはcpuは1つなので、擬似的に複数処理をしているようにみせかけている。 例えば、マルチスレッドは、ブラウザに例えれば、画像をダウンロードしながら、画面をスクロールしたりというように、複数の処理を同時に実行している。そして、この処理の1つ1つがスレッド。 こういうことでしょうか?

    • ベストアンサー
    • Java
  • Javaのスレッドとcpuのスレッド

    javaのスレッドは各スレッドを少しずつ実行してあたかも同時に実行しているように見せかけているだけだと本で読んだことがあります。現在のcpuはi7 8700kだと6コア12スレッドになりますが、この場合どのような動きになるのでしょうか。 例えば12個のスレッドを使用したプログラムを実行するとpcが勝手に8700kの12スレッドに割り振って実行してくれるのか、それとも単にcpuの1スレッドでjavaの12スレッドを同時に動かしてるように見せかけるのか、cpuのスレッドとjavaのスレッドの関係がいまいち解りません。

  • スレッドの必要性、OSとの関係について教えて下さ

     javaの初心者です、スレッドについて質問致します、宜しくお願いします。  スレッドは、ある物体が動くようなプログラムを作った場合に、CPUを独占しないように Sleepを設定しCPUを解放、他の動作に振り向けるとか、また、ある説明では、貯金の出 し入れを順序よく計算させるために必要と書かれていました。  しかし、CPUを独占させないというのは、JAVAプログラム側でわざわざコントロールしてや る必要があるのでしょうか。というかそのような基本システムでJAVAというプログラムが最初 から作られているということでしょうか。  もともとJAVAで作成したプログラムが動作していなくても、OS側で常時動作している他の複 数のプログラムをマルチスレッドとか、割込み対応でコントロールしているのではないのでしょ うか。  それとも、JAVA(とか他のCとか)で作成したプログラムが動作した場合には、この考えは 適用されないということでしょうか。  OSとの関係(役割分担?)みたいなものがよく理解出来ません。  常時CPUを独占しない一時的に計算をするとか、イメージを表示する静的プログラム(?) でも、スレッドは走っていると思うのですが、ある物体が動くようなプログラムの場合には、プ ログラム自体を走らせるスレッドと、ある物体を常時動かすスレッドと2本走っているというこ とでしょうか。  また、javaの場合には、このようなプログラムを組んだ場合には、必ずスレッドを組み込ん でやる必要があるとか、エラーとか、例外が発生するということはあるのでしょうか。

    • ベストアンサー
    • Java
  • スレッドの監視方法について

    現在、pthread_createにてスレッドを生成するプログラムを作成しております。phread_createにてスレッド生成後、生成したスレッドが実行中か判断する方法はないのでしょうか? 大変申し訳ございませんが、ご教授宜しくお願い致します。

  • スレッドについてお教えください。

    スレッドについてお教えください。 今、画面のプログラムより、帳票を出力しています。 帳票の出力に時間がかかるため画面のプログラムとは非同期に 別スレッドにして帳票を出力しようと考えたのですがこの場合 一つの帳票の処理中に同じ要求が複数来た場合、スレッドは 複数立ちあがってしまい帳票の順番が狂ってしまうものと 思います。 これを要求はキューしていくが、処理は順次行う(1処理終了後に 次の要求を処理する)ということは可能なのでしょうか? お願いいたします。

専門家に質問してみよう