タグ

coroutineとthreadに関するnabinnoのブックマーク (7)

  • Route 477(2007-06-20)

    ■ [ruby][event] Ruby勉強会@関西-16「30分でわかるcallccの使い方」 先週末のRuby勉強会@関西で、Rubyにおけるcallccの使い方について発表させていただきました。 スライド: pdf ppt 継続の説明については「なんでも継続」がよく参照されるんだけど、 ちょっと説明がボトムアップすぎると思うので(僕も最初に読んだときは全然分からなかった)、「callccで何ができるか」という応用面から攻める 構成にしてみました。 最初は「継続かわいいよ継続」「それをすてるなんてとんでもない」と思ってたんだけど、 いろいろ調べてるうちになんでcallccが嫌われるのかが理解できてしまった。callccはかわいいけど、非常に手のかかる奴らしい。 しかも、面白い利用例はいっぱいあるけど実用的な例があんまりないんだよね^^;。 callccが無くなるとRubyの「かっこよさ

    Route 477(2007-06-20)
  • Ruby勉強会@関西でFiberについて勉強してきた - はこべにっき ♨

    Rubyの会 公式Wiki - 第32回 Ruby勉強会@関西 に行ってきました.なんだかんだでひさびさのRuby勉強会でたのしかった! 運営のみなさまおつかれさまでした. 勉強会に行くと,普段得られない刺激がいろいろ得られて良いですね.日常生活はパターンに押し込めがちでだれてくるので,定期的に非日常に自分をもってくのは,精神衛生上よろしいです. 全般的な詳細については,日Rubyの会 公式Wiki - 第32回 Ruby勉強会@関西の続々よせられるであろうトラックバックや(とおもったらなんか無効になってる),いっしょに行っていっしょにさくさく迷った,id:hitode909くんの第32回 Ruby勉強会@関西に行った - hitode909の日記というエントリを参照してみてください. 今回はサイロスさんのFiberについてのセッションがおもしろかったので,Fiberについていろいろ

    Ruby勉強会@関西でFiberについて勉強してきた - はこべにっき ♨
  • 継続こわくない(RubyでFiberを使ったコードをcallccで書きなおしてみた) - 方向

    Fiberに関するこんな記事をみて、 そういえば以前30分でわかるcallccの使い方で、 callccの代表的な使い方は * (A) 処理の中断/再開 (generator, wait_ok) * (B) 処理のやり直し (amb, ppp) の2通りが挙げられる。 callccが危険なのは(B)ができてしまうからだ。じゃあ(A)の機能だけなら残してもいいかも?ということで、Ruby 1.9ではFiberという機能が検討されている。 と書いてあったのを思い出して、「Fiberはcallccの抽象化ってことか……じゃあFiberのコードはcallccで書き直せるのかな?」 と思い試してみました。 Fiberのコード はこべにっき#より、改変 require 'fiber' def count() n = 0 Fiber.new do loop do Fiber.yield n n += 1

  • RubyのThreadとFiberの違い: ThreadとFiberの違い, 今、西尾泰和『コーディングを支える技術』を読んでいて、, 第10章「並行処理」にこんなことが書いてあって、そのことを思い出した。, , , ちょ��

    [Ruby] ThreadとFiberの違い前、#shibuyarblunchっていう、渋谷に縁のあるRubyistが集まってお昼をご一緒しましょう、というので、ThreadとFiberの違いが話題になった。 確か刺身さんだったと思うんだけど、Fiberを使えるような時には、Threadも使えるんではないか、Fiberを使うシーンが想像できない、といったことを言っていたように思う。それで、僕はその時、「そうですね」と言って、Fiberが存在する意義を分かっていなかった。今、西尾泰和『コーディングを支える技術』を読んでいて、コーディングを支える技術 ~成り立ちから学ぶプログラミング作法 (WEB+DB PRESS plus)西尾泰和技術評論社発売日:2013-04-24ブクログでレビューを見る» 第10章「並行処理」にこんなことが書いてあって、そのことを思い出した。スレッドを使った時に競合状

  • ファイバー (コンピュータ) - Wikipedia

    ファイバー(英: fiber)は、計算機科学の分野において、非常に軽量な実行スレッドを示す。 ファイバー同士はスレッドと同じくアドレス空間を共有するが、両者には区別が存在する。 ファイバーが協調マルチタスクを使用するのに対し、スレッドはプリエンプティブマルチタスクを用いる。スレッドでは、ビジーなスレッドに割り込み他のスレッドを復帰させるためにカーネルのスレッドスケジューラを用いることが多いが、ファイバーは他のスレッドを実行させるために自ら制御を譲る。 ファイバーとコルーチン[編集] ファイバーはコルーチンと質的には同じ概念である。違いは、もしあるとすればコルーチンが言語レベルの構造で、制御の流れの形態の一つであるのに対し、ファイバーはシステムレベルの構造であり、並行に動作しないスレッドと捉えられる点である。どちらに近いか異論はあろうが、ファイバーはコルーチンの実装か[1]、あるいは、コル

  • class Thread (Ruby 3.3 リファレンスマニュアル)

    [edit] 要約 スレッドを表すクラスです。スレッドとはメモリ空間を共有して同時に実行される制御の流れです。 Thread を使うことで並行プログラミングが可能になります。 実装 ネイティブスレッドを用いて実装されていますが、現在の実装では Ruby VM は Giant VM lock (GVL) を有しており、同時に実行されるネイティブスレッドは常にひとつです。ただし、IO 関連のブロックする可能性があるシステムコールを行う場合には GVL を解放します。その場合にはスレッドは同時に実行され得ます。また拡張ライブラリから GVL を操作できるので、複数のスレッドを同時に実行するような拡張ライブラリは作成可能です。 スケジューリング Ruby のスレッドスケジューリングはネイティブスレッドのそれを利用しています。よって詳細はプラットフォームに依存します。 メインスレッド プログラムの開

  • class Fiber (Ruby 3.3 リファレンスマニュアル)

    [edit] 要約 ノンプリエンプティブな軽量スレッド(以下ファイバーと呼ぶ)を提供します。他の言語では coroutine あるいは semicoroutine と呼ばれることもあります。 Thread と違いユーザレベルスレッドとして実装されています。 Thread クラスが表すスレッドと違い、明示的に指定しない限りファイバーのコンテキストは切り替わりません。またファイバーは親子関係を持ちます。Fiber#resume を呼んだファイバーが親になり呼ばれたファイバーが子になります。親子関係を壊すような遷移(例えば自分の親の親のファイバーへ切り替えるような処理)はできません。例外 FiberError が発生します。できることは Fiber#resume により子へコンテキストを切り替える Fiber.yield により親へコンテキストを切り替える の二通りです。この親子関係は一時的なも

  • 1