2006-07-24 :-)
_ 仕事
0830 寒川。
_ タスクシステムとか状態遷移とか
( via Youichi さんとこ )
HSM や ファイバ( Fiber? ) なんて言葉は初めて聞きました orz
状態遷移はせいぜい switch case を使ったくらいだけど概念は分かるっす。
しかしファイバはさっぱり分からない。
光ファイバじゃないし...。
_ ファイバ( fiber )
ぐぐってみた。
いまいちイメージがつかめない...。
fiber は、ユーザーコードで定義される。Kernel は fiber に関することは何も知らないし、それらの実行はプログラマーが決めたアルゴリズムによって決められる。fiber の切り替えアルゴリズムがプログラマー定義であるということは、カーネルから見れば、プリエンプティブ方式ではない。つぎに重要なことは、一つのスレッドが一つ以上の fiber を含むことが出来るということだ。カーネルから見て、プリエンプティブ切り替えはスレッドにのみ適用され、スレッドがプログラムコードを実行する。しかし、スレッドは同時に一つしかファイバーを実行できない---どのファイバーを実行するかはプログラマー任せなのだ。
ファイバ
Windows CE.NETではファイバ(fiber)のサポートが追加された。ファイバを理解するためには,まずスレッドについて理解する必要がある。スレッドとは,プロセスが所有するものであり,スケジュールの対象となる実体である。プロセスはスケジュールの対象ではない。1つのプロセスは少なくとも1つのスレッドを持つが,それ以上のスレッドをいくつでも持つことができる。スレッドは,複数の並行する動作を可能にするもので,たとえば,ネットワークポートからの入力を待ったり,出力をプリンタに送ったり,ユーザーの入力を待ったりする。オペレーティングシステムは,「待ち状態」,「実行可能状態」などのスレッドの状態と,ほかの実行可能状態スレッドとの相対的な優先度をもとにして,個々のスレッドをどのようにスケジュールするかを決定する。
ファイバはスレッドをさらに精細にしたものである。1つのスレッド上で複数のファイバを実行することができる。同一スレッド上で2つのファイバが実行されている場合でも,オペレーティングシステムはスレッド単位で実行のスケジュール管理をする。ファイバはスレッドにスケジュール時間が割り当てられている間,常に動き続ける。どのファイバを動かすかを決定するのは,オペレーティングシステムではなくファイバの所有者(アプリケーションやDLL)である。興味深いことに,これはWindows 1.01からWindows NT 3.1が出荷される前までの間のすべてのバージョンのWindowsで使われてきた16ビットWindowsアプリケーションと同じ形式の,協調型ノンプリエンプティブスケジューリングである。Windows NT 3.1以降のWindowsでは,プリエンプティブなスケジューラが導入され,スレッドをサポートするようになった。
_ ファイバ( 2 )
- 軽量なスレッド
- カーネルに管理させるのではなく自力で管理する
- カーネルスレッドは重い
というものかしらん。
ref.
- [cppll:6196] マイクロスレッド
- fiber 話を少しまとめてみる
- dW - Linux - 魅力的なPython: Pythonジェネレーターで「無重量スレッド」を実装する
- Fibers [Base]
A fiber is a unit of execution that must be manually scheduled by the application. Fibers run in the context of the threads that schedule them.
ここで何度か登場する「非時分割で非プリエンプティブ(協調型)なスレッド」のことを "fiber" と呼ぶことがあるらしい。
どちらもゲームプログラミングでつかわれるんだとか。あと、ファイバってスレッドよりもっと小さい単位らしいっす...
> youichi さん<br>youichi さんのところのリンク先を読んでると「 こんなものがあったのかーーー」と楽しめます。<br>スレッドより小さいって、さすがに想像つかないです ^^;<br>ううむ。
タスクシステムの変わりで使いますー<br>すっきり書けると言うか直感的にわかりやすいのです<br>たぶんw
> kennak さ<br>タスクシステムというか TCB ( Task Control Block ) といったものは OS のプログラムコードの中に見たりしたので「 ゲームのシステムは OS のように複雑なことをしてるのか 」という印象でした ^^;<br>でも複数のスレッドで動作するプログラムは珍しくないっすね....。<br><br>あーだこーだ想像で言っても会話できないので自分でも手を動かしてみやう。