148件ヒット
[1-100件を表示]
(0.128秒)
キーワード
- ConditionVariable (22)
- Enumerator (11)
- ErrNoFinishedThread (6)
- ErrNoWaitingThread (6)
- Location (11)
- MultiTask (11)
- Mutex (9)
- Queue (11)
- SizedQueue (11)
- ThreadError (11)
- ThreadGroup (11)
- ThreadMember (11)
- ThreadsWait (6)
検索結果
先頭5件
-
Thread (44119.0)
-
スレッドを表すクラスです。スレッドとはメモリ空間を共有して同時に実行される制御の流れです。 Thread を使うことで並行プログラミングが可能になります。
...同時に実行される制御の流れです。
Thread を使うことで並行プログラミングが可能になります。
=== 実装
ネイティブスレッドを用いて実装されていますが、
現在の実装では Ruby VM は Giant VM lock (GVL) を有しており、同時に実......るとスレッドの実行も終
了します。ブロックの終了は正常な終了も例外などによる異常終了も含みます。
===[a:exception] 例外発生時のスレッドの振る舞い
あるスレッドで例外が発生し、そのスレッド内で rescue で捕捉されな......ッドを Thread#join で待っている他の
スレッドがある場合、その待っているスレッドに対して、同じ例外が再度
発生します。
begin
t = Thread.new do
Thread.pass # メインスレッドが確実にjoinするように
raise "unhandled exce... -
ThreadsWait
:: ErrNoFinishedThread (18001.0) -
nonblock がtrue でかつ、キューが空の時、発生します。
...nonblock がtrue でかつ、キューが空の時、発生します。
@see ThreadsWait#next_wait... -
ThreadsWait
:: ErrNoWaitingThread (18001.0) -
終了を待つスレッドが存在しない時、発生します。
...終了を待つスレッドが存在しない時、発生します。
@see ThreadsWait#next_wait... -
ThreadGroup (12107.0)
-
スレッドグループを表すクラスです。グループに属する Thread をまとめて 操作することができます。
... Thread をまとめて
操作することができます。
Thread は必ずいずれかひとつのスレッドグループに属します。
生成されたばかりの Thread は、生成した Thread のグループを引き継ぎます。
メインスレッドはデフォルトでは ThreadGr......oup::Default に属します。
: 例:
生成したすべてのThreadが終了するのを待つ
5.times {
Thread.new { sleep 1; puts "#{Thread.current} finished" }
}
(ThreadGroup::Default.list - [Thread.current]).each {|th| th.join}
puts "all threads finished"......の Thread が Thread を起こす可能性がある場合
(Thread.exclusive参照)
Thread.exclusive do
(ThreadGroup::Default.list - [Thread.current]).each {|th| th.join}
end
=== ThreadGroup#freeze と ThreadGroup#enclose の違い
どちらのメソッドでも ThreadGroup#add に... -
ThreadError (12047.0)
-
Thread 関連のエラーが起きたときに発生します。
...Thread 関連のエラーが起きたときに発生します。
* カレントスレッドを Thread#join しようとしたとき
* Thread#join でデッドロックしそうになったとき
* 終了したスレッドを Thread#wakeup あるいは Thread#run しようとしたとき
*......スレッドが一つしかないのに Thread.stop しようとしたとき
* Kernel.#throw がスレッド内で Kernel.#catch されないとき
* スレッドから return しようとしたとき
* イテレータを与えずにスレッドを生成しようとしたとき
* カレン... -
Net
:: IMAP :: ThreadMember (12033.0) -
Net::IMAP#thread、 Net::IMAP#uid_thread から 得られるスレッドの木構造のノードを表すクラスです。
...Net::IMAP#thread、 Net::IMAP#uid_thread から
得られるスレッドの木構造のノードを表すクラスです。... -
ThreadsWait (12001.0)
-
複数スレッドの終了を待つ機能を提供します。
複数スレッドの終了を待つ機能を提供します。 -
Thread
:: ConditionVariable (9073.0) -
スレッドの同期機構の一つである状態変数を実現するクラスです。
...です。
以下も ConditionVariable を理解するのに参考になります。
https://ruby-doc.com/docs/ProgrammingRuby/html/tut_threads.html#UF
=== Condition Variable とは
あるスレッド A が排他領域で動いていたとします。スレッド A は現在空いていない
リ......れはうまくいきません。
なぜなら、スレッド A は排他領域で動いているわけですから、他のスレッドは動くことが
できません。リソースを空けることもできません。スレッド A がリソースの空きを
待っていても、いつまで......cv.signal
}
}
以下は 14445 で紹介されている例です。@q が空になった場合、
あるいは満タンになった場合に Condition Variable を使って wait しています。
require 'thread'
class TinyQueue
def initialize(max=2)
@max = max
@... -
Thread
:: Backtrace :: Location (9019.0) -
Ruby のフレームを表すクラスです。
...#caller_locations から生成されます。
//emlist[例1][ruby]{
# caller_locations.rb
def a(skip)
caller_locations(skip)
end
def b(skip)
a(skip)
end
def c(skip)
b(skip)
end
c(0..2).map do |call|
puts call.to_s
end
//}
例1の実行結果:
caller_locations.rb:2:in `a'
caller_locat......:in `b'
caller_locations.rb:8:in `c'
//emlist[例2][ruby]{
# foo.rb
class Foo
attr_accessor :locations
def initialize(skip)
@locations = caller_locations(skip)
end
end
Foo.new(0..2).locations.map do |call|
puts call.to_s
end
//}
例2の実行結果:
init.rb:4:in `initialize'
in......it.rb:8:in `new'
init.rb:8:in `<main>'
=== 参考
* Ruby VM アドベントカレンダー #4 vm_backtrace.c: https://www.atdot.net/~ko1/diary/201212.html#d4... -
Enumerator (6031.0)
-
each 以外のメソッドにも Enumerable の機能を提供するためのラッパークラスです。 また、外部イテレータとしても使えます。
...each 以外のメソッドにも Enumerable の機能を提供するためのラッパークラスです。
また、外部イテレータとしても使えます。
Enumerable モジュールは、 Module#include 先のクラスが持つ
each メソッドを元に様々なメソッドを提供し...... Array#map は Array#each の繰り返しを元にして定義されます。
Enumerator を介することにより String#each_byte のような
異なる名前のイテレータについても each と同様に Enumerable の機能を利用できます。
Enumerator を生成するには Enumera......erator を生成して返します。
=== 注意
外部イテレータとしての機能は Fiber を用いて実装されているため Fiber と同じ制限があります。
例えば以下のようなスレッドをまたいだ呼び出しはエラーになります。
//emlist[例][ruby]{
a... -
Thread
:: SizedQueue (6029.0) -
サイズの最大値を指定できる Thread::Queue です。
...る Thread::Queue です。
=== 例
283 より。q をサイズ 1 の SizedQueue オブジェクトに
することによって、入力される行と出力される行が同じ順序になります。
q = [] にすると入力と違った順序で行が出力されます。
require 'thread'......q = SizedQueue.new(1)
th = Thread.start {
while line = q.pop
print line
end
}
while l = gets
q.push(l)
end
q.push(l)
th.join...