トップ «前の日記(2006-07-23) 最新 次の日記(2006-07-25)» 編集

ヨタの日々

2001|08|09|10|11|12|
2002|01|02|03|04|05|06|07|08|09|10|11|12|
2003|01|02|03|04|05|06|07|08|09|10|11|12|
2004|01|02|03|04|05|06|07|08|09|10|11|12|
2005|01|02|03|04|05|06|07|08|09|10|11|12|
2006|01|02|03|04|05|06|07|08|09|10|11|12|
2007|01|02|03|04|05|06|07|08|09|10|11|12|
2008|01|02|03|04|05|06|07|08|09|10|11|12|
2009|01|02|03|04|05|06|07|08|09|10|11|12|
2010|01|02|03|04|05|06|07|08|09|10|11|12|
2011|01|02|03|04|05|06|07|08|09|10|11|12|
2012|01|02|03|04|05|06|07|08|09|10|11|12|
2013|01|02|03|04|05|06|07|08|09|10|11|12|
2014|01|02|03|04|05|06|07|08|09|10|11|12|
2015|01|02|03|04|05|06|07|08|09|10|11|12|
2016|01|02|03|04|05|06|07|08|09|10|11|12|
2017|01|02|03|04|05|06|07|08|09|10|11|12|
2018|01|02|03|04|05|06|07|08|09|10|11|12|
2019|01|02|03|04|05|06|07|08|09|10|11|12|
2020|01|02|03|04|05|06|07|08|09|10|11|12|
2021|01|02|03|04|05|06|07|08|09|10|11|12|
2022|01|02|03|04|05|06|07|08|09|10|11|12|
2023|01|02|03|04|05|06|07|08|12|
2024|01|02|03|04|

2006-07-24 :-)

_

0500 起床。

ねむ。

_ 仕事

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.

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" と呼ぶことがあるらしい。

本日のツッコミ(全4件) [ツッコミを入れる]
_ youichi (2006-07-24 10:15)

どちらもゲームプログラミングでつかわれるんだとか。あと、ファイバってスレッドよりもっと小さい単位らしいっす...

_ みわ (2006-07-24 12:07)

> youichi さん<br>youichi さんのところのリンク先を読んでると「 こんなものがあったのかーーー」と楽しめます。<br>スレッドより小さいって、さすがに想像つかないです ^^;<br>ううむ。

_ kennak (2006-07-25 23:04)

タスクシステムの変わりで使いますー<br>すっきり書けると言うか直感的にわかりやすいのです<br>たぶんw

_ みわ (2006-07-26 07:45)

> kennak さ<br>タスクシステムというか TCB ( Task Control Block ) といったものは OS のプログラムコードの中に見たりしたので「 ゲームのシステムは OS のように複雑なことをしてるのか 」という印象でした ^^;<br>でも複数のスレッドで動作するプログラムは珍しくないっすね....。<br><br>あーだこーだ想像で言っても会話できないので自分でも手を動かしてみやう。