タグ

関連タグで絞り込む (0)

  • 関連タグはありません

タグの絞り込みを解除

concurrent-computingとrubyとcoroutineに関するnabinnoのブックマーク (3)

  • 継続こわくない(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

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

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

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

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

  • 1