Ruby とプロセス spawn について 産業技術総合研究所 情報技術研究部門 田中哲 2009-04-15 SEA & FSIJ 合同フォーラム 発表の内容 ● Ruby における今までのプロセス起動 ● spawn とはどういうものか ● なぜそういう仕様になったのか ● open3 プロセス起動の用途 ● 出力を less 経由でユーザに見せる ● エディタを起動してユーザになにか入力させる ● lpr を起動してプリントアウト ● 大きなデータを sort でソート ● w3m で HTML を表示 ● feh で画像を表示 Ruby のプロセス起動 ● `command` ● system(command) ● exec(command) ● IO.popen(command, mode) ● fork { ... } プロセス起動法の起源 ● `c` perl, shell
特にサーバー用途では、CPUがシングルコアに戻ってくることは考えにくい。 マルチコアCPUの性能を活かすにはマルチスレッドに対応したサーバーの実装が必要になるわけですが、マルチスレッドなプログラミングは往々にして「高負荷になると固まる」とか「たまに落ちる」といった悩ましいバグと戦わなければならず、イヤです。 かといってシングルスレッドでは、近い将来 32コアCPU! などが出てきたとき、たぶん性能を発揮できません。 そこで、そこそこデバッグしやすく、それでいて多コアCPUでもスケールするという落としどころを模索しているのですが、ボトルネックはネットワークIO周りにあるだろう*1という前提の元で、ネットワークIO部分だけをマルチスレッドで動かし、それ以外の部分をシングルスレッドで動かすというアーキテクチャを考えています。 ロジックの部分はマルチスレッドで書いても共有リソースにアクセスする度に
■ [event][Ruby/SDL] Ruby1.9のFiberはゲームにも使えるのか? 結論から言うと、余裕で使える。 今使ってるノートPC (PenM 1.2GHz, メモリ1GB) だと300キャラくらいまで大丈夫な感じです。 大丈夫というのは「描画フレーム数が50/秒以上」とかそんな。 ていうかFiberってなによ いわゆるコルーチンです。 ふつーのゲームプログラミングでは、敵を「右→下→左→上」という順に動かすために「いま動作のどこまでやったかフラグ」 を用意したりして頑張るんですが、コルーチンがあればこんなに簡単に。 def act_move1(i) @x = rand(640) @y = rand(480) 40.times{ @x += 8; Fiber.yield } # 40回右に動く 40.times{ @y += 8; Fiber.yield } # 40回下に動
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く