タスクシステム総合スレ part2

このエントリーをはてなブックマークに追加
952名前は開発中のものです。:2008/11/06(木) 01:30:36 ID:u8lLg0Ce
>>950
>タスクシステムはまともに定義されてもいないし
こんな隔離スレっぽいところですばやいレスがあるのに驚いたw
そういや定義云々でけっこうもめてた感もあるな。

印象論ですまんけど、俺のいまんところの認識では

・アプリケーション内部で擬似マルチタスクを実現する手法のひとつ
・プログラムのループを一部開放して、複数のサブルーチン(死語?)をつけはずしできるようにしたもの
・if〜else/switchのネストよりはましかもしれない。

ってところかなあ。まあ、俺が駄目PGなんで、自分が考えたものよりマシかもしれん、
ってだけなんだが。
953名前は開発中のものです。:2008/11/06(木) 11:58:35 ID:q/CP8wrK
>>952 で合ってるだろ。
954名前は開発中のものです。:2008/11/06(木) 12:44:17 ID:Tr7oUC7Q
>そういや定義云々でけっこうもめてた感もあるな。

定義すら出来ないタスク擁護派の虚を付く形で一方的に蹂躙されてたね
タスクシステムという単語を耳にしたら「俺俺システム」とか「俺の発明した至高のオナニーシステム」
とでも置換したほうが理解しやすい。定義できるはずもない。ざまぁ
955名前は開発中のものです。:2008/11/06(木) 12:56:48 ID:Tr7oUC7Q
>擬似マルチタスク

マルチタスクの要件を満たしてる例がひとつもなかったような
擬似ですらない。単なる似非だろう。天と地の開きがある

>・プログラムのループを一部開放して、複数のサブルーチン(死語?)をつけはずしできるようにしたもの

印象論というか日本語でおk

>・if〜else/switchのネストよりはましかもしれない。

過去に出てきた例を見る限り、どのオナニーシステムも
可読性の面ではどれも凶悪といっていい水準だったな
956名前は開発中のものです。:2008/11/06(木) 14:03:57 ID:yOFGd/wG
haskellやadgaでタスクシステムが実装できれば定義したも同然
957名前は開発中のものです。:2008/11/06(木) 14:35:49 ID:kq5uaoNw
>>952
隔離スレっぽいんじゃなくてID:Tr7oUC7Qみたいな子を隔離するスレ

>>954
権力的に偉い人が好んで使う「国益」という言葉も
具体的な内容については大きな揺らぎがある。
偉い人に喧嘩売る気がないのなら
定義できないことをあまり悪く言わない方がいいと思うんだ。
958名前は開発中のものです。:2008/11/06(木) 15:16:03 ID:q/CP8wrK
>>955
まずおまえが「マルチタスクの要件」とやらを定義してみてくれ
959名前は開発中のものです。:2008/11/06(木) 15:41:18 ID:Tr7oUC7Q
最低でも
 ・スケジューリング
 ・コンテキストスイッチ
 ・タスク間通信

擬似を名乗るならせめてこれぐらいは欲しいね
で、擬似タスクとかタスクシステムを自称してるコードで
コンテキストスイッチができてるものはほとんど見ない

FSMリストの走査・更新してタスクシステムばんじゃい!ばっかだろ
960名前は開発中のものです。:2008/11/06(木) 15:51:13 ID:Tr7oUC7Q
>>957
>国益〜

他人を諭すのに安易に分けの分からん例え話を始めるようなら
この老害本格的に焼きが回ってんなー思われるから言わない方がいいと思うんだ
961名前は開発中のものです。:2008/11/06(木) 18:38:39 ID:q/CP8wrK
じゃぁコンテキストの保存ができないマルチタスク、とでも呼ぼうか。
あんたの「擬似」の定義に従って、だけど。
962名前は開発中のものです。:2008/11/06(木) 19:12:24 ID:Tr7oUC7Q
擬似の意味が分からないなら辞書で調べてね
本来の代物がウリにしてる「基本的なサービス」すら提供できないにも関わらず
擬似と名乗るのは半島文化か何かかね?素直に似非と認めたほうがしっくりくるぜ?

ついでに似非も辞書で調べましょう。納得ですね?

>コンテキストの保存ができないマルチタスク

コンテキストスイッチできないマルチタスクシステムは果たしてマルチタスクシステムなのか?
まぁどっかの例え好きのオッサンなら「チンポ付いてない男。でも心は男ですから!男です!」
とでも反論するんだろうね
963名前は開発中のものです。:2008/11/06(木) 20:02:31 ID:q/CP8wrK
ああ、特定2ちゃんねらーでもあったか。人間のクズだな。相手して損した
964名前は開発中のものです。:2008/11/06(木) 20:08:41 ID:Tr7oUC7Q
はい、敗北遁走宣言来ました
965名前は開発中のものです。:2008/11/06(木) 20:10:08 ID:q3x+LI10
マジキチ
966名前は開発中のものです。:2008/11/06(木) 20:38:55 ID:6uLCJgnb
タスク信者がんばれがんばれ何でそこで諦めちゃうんだよやれば出来る出来るがんばれがんばれ
世間はさぁ冷てぇよな。みんな君のタスクシステムへの思いを感じてくれねぇんだよ
どんなに頑張ってもさぁ、何で分かってくれねぇんだよって思うときあるのよね

でも大丈夫、分かってくれる人はいる。そう、松浦尊師に付いて来い!

ただいま尼オクで聖典「シューティングゲームアルゴリズムマニアックス」好評販売中!
買わなければ仏罰が下って地獄に落ちるよ。さぁ浄財を奉納して極楽浄土へいらっしゃい
967名前は開発中のものです。:2008/11/06(木) 21:50:36 ID:w1bQOqdR
次スレまだ〜?チンチン
968名前は開発中のものです。:2008/11/06(木) 22:04:02 ID:lvyck+uw
>>961
> じゃぁコンテキストの保存ができないマルチタスク、とでも呼ぼうか。
そんな汁のない味噌汁みたいな名前つけられても…
969名前は開発中のものです。:2008/11/06(木) 23:56:19 ID:slS/2L3k
よーしお兄さんが書き逃げしてあげるぞー。

【マルチタスク】
プリエンプティブなマルチタスクOSではスケジューラがプロセスをタイムスライス(短い時間)ごと分割して実行する。
処理がタイムスライス内で終わらない場合、タイマ割り込みによってコンテキストスイッチが発生する。
他にも割り込みはあるけどとりあえずここまで。
で、コンテキストスイッチとは現在のCPUのレジスタ等の状態を保存し、次に実行する処理のためにレジスタ等の状態を復元する処理のこと。

【タスクシステム】
全てがタスクリストに含まれているとするなら。
1フレーム内での行う全ての処理=タスクリスト
1フレーム内での行う全ての処理=タスクリスト+描画処理
1フレーム内での行う全ての処理=タスクリスト+当り判定等+描画処理
1フレーム内での行う全ての処理=タスクA+タスクB+…+タスクZ+当り判定+描画処理
1フレームの時間は大抵は1/60秒とか1/30秒とか、1フレーム内で終わらなかったときは描画がスキップされる。
だからコンテキストスイッチは不要では。
970948:2008/11/07(金) 00:09:50 ID:t//oE7rA
あー、また怒ってるよw なんか恨みでもあるの?>> 959
どこかで時分割も擬似マルチタスクだっていうのを見たこともあるんで、そういわれりゃマルチタスク風くらいでいいかな?
俺的にはエターナルブリザードシステムが気に入ったけど。

マルチタスクの定義はまあ、確かにそうだけど、それ、アプリケーションが
自前で実装するようなものかな?あー、「システム」ってのが気に入らないのかな。

>・プログラムのループを一部開放して
ここでもでてきたけど、
while ( keep_going ) {
update_chara();
update_stage();
render_all()
}
みたいなループだと処理順も固定になるところを、個別の処理を配列/リスト化して
動的に切り替えられるようにしてあるわけでしょ?
少しは自由度は高いと思うけど、メリット・デメリットは微妙かなあとは思う。
971名前は開発中のものです。:2008/11/07(金) 00:15:48 ID:6KHA8D9T
>>959は最近どっかでマルチタスクを勉強してきて教えて回りたいんだろ。
ここはそういう話するところじゃないからね。
また別のところ行ってやってね。
972948:2008/11/07(金) 00:43:39 ID:t//oE7rA
>だからコンテキストスイッチは不要では。
いや、マルチタスク処理、と考えれば、タスクが勝手にスイッチされてくれるほうが
各タスクで処理を戻すとか考えずに記述できるぶん見通しはよくなると思う。

でもそう思ってマルチスレッドで組むとスレッドの同期とか排他とか必要になって
あんまりシンプルにならない罠。
973名前は開発中のものです。:2008/11/07(金) 01:08:41 ID:PkFbpCU8
>>970
そういえば文章心理学っていう単位とったけど難しくてよく分からなかったよ
あとついでにエターナル「フォース」ブリザードシステムだったような気がするよ

>マルチタスクの定義はまあ、確かにそうだけど、それ、アプリケーションが
>自前で実装するようなものかな?

そういうこと。IA32でいうところの特権命令群に触れる立場に無い、たとえばWindowsの
ユーザーモードのプログラムコードで、わざわざマルチタスクシステム用意する価値ないよ

>>・プログラムのループを一部開放して
>ここでもでてきたけど、
>while ( keep_going ) {
>update_chara();
>update_stage();
>render_all()
>}
>みたいなループだと処理順も固定になるところを、個別の処理を配列/リスト化して
>動的に切り替えられるようにしてあるわけでしょ?
>少しは自由度は高いと思うけど、メリット・デメリットは微妙かなあとは思う。

↑の例で、ゲームの仕様で初めから処理優先順位が静的と確定しているならば
動的にするメリットはないだろうね。どう転んでも不要と分かりきってる自由度を
与える行為は有毒だしデメリットでしかないよね。
ところで「タスクシステム」というのはそういう不要な自由度を与える事を回避できない
代物なの?このスレを読む限り「タスクシステム」を熱愛して提唱している人の話は
単なるリスト巡回UPDATEでしかないという印象を受けるんだけど

>>971
>>958
974名前は開発中のものです。:2008/11/07(金) 01:15:41 ID:PkFbpCU8
訂正

>そういうこと。IA32でいうところの特権命令群に触れる立場に無い、たとえばWindowsの
>ユーザーモードのプログラムコードで、わざわざマルチタスクシステム用意する価値ないよ

そういうこと。IA32でいうところの特権命令群に触れる立場に無い、たとえばWindowsの
ユーザーモードのプログラムコードで、わざわざマルチタスクシステム用意する価値は
ハードウェアリソースが貧弱だった頃は無かったよ

でも、ハードウェアの進歩でソフトウェア処理によるコンティストスイッチが実用的なケースが
増え続けているよ
975948:2008/11/07(金) 01:44:47 ID:t//oE7rA
>わざわざマルチタスクシステム用意する価値ないよ

これはケースバイケースじゃないか?まあ、俺が駄目駄目なんで偉そうなことは
いえないけど、ゲーム上のオブジェクトって独立して動きつつ、互いの情報を
参照したりするでしょ?
システムの提供するサービスで全部実現するのは理想かもしれないけど、
マルチスレッドは追っかけるのも結構大変だし、マルチタスク風、実はシーケンシャル
な処理ってその点はわかりやすかったりするよ?

>ゲームの仕様で初めから処理優先順位が静的と確定しているならば

本職のゲーム屋じゃないんでなんともいいにくいけど、
その仮定は理想かもしれないけど、現実には程遠いような気がw

基本ロジックを作っておけば、いろいろなタイプのゲームに対応できる
(というのも売りらしい)んなら、まあ、便利なんじゃないの?

>不要な自由度を与える事
開発者が用意して開発者が利用する分にはあんまり問題じゃないような気がするけど。

976948:2008/11/07(金) 01:51:27 ID:t//oE7rA
>>974
?タスクシステムに肯定的なのか否定的なのかちょっとわかりにくい。
977名前は開発中のものです。:2008/11/07(金) 02:01:50 ID:0eofhGUn
タスク=リスト巡回UPDATEでFAだろ
それ以上でもそれ以下でもない

俺はタスク擁護派だが、アンチは誰と戦ってんだよw
978969:2008/11/07(金) 02:03:49 ID:0ZMEybut
反撃レス内みたいなんで

wikiの内容からするとタスクシステム=擬似マルチタスクということになる。
http://ja.wikipedia.org/wiki/%E3%83%9E%E3%83%AB%E3%83%81%E3%82%BF%E3%82%B9%E3%82%AF
ノンプリエンプティブ・マルチタスク
各タスク自身が、短い時間間隔でOSに処理を返す方式によって実現されているものを、ノンプリエンプティブなマルチタスクあるいは疑似マルチタスクという。

>>972
敵1体ごとスレッド作るとか無理じゃね。
あんまりシンプルにならないとかじゃすまないと思うが。

>>973
単なるリスト巡回UPDATEでしかないよ。
不要な自由度はデメリットかもしれんがC/C++で実装してたら別にどうとでもなっちゃうだろ。
C/C++の不要な自由度のおかげで実装に苦労できる。色々な実装があってみんないい。
とはいわんけど。
979948:2008/11/07(金) 02:10:14 ID:t//oE7rA
まあ、ただ 974 がいいたいのが、世間wでは GPGPUを使った物理演算だの、
マルチコアに最適化された並列処理だとか言ってる時代に、ちまちまと
古いコーディングテクニックとかやってると駄目だ、っていう話ならわからんでもない。
PS3あたりの大規模ゲームとかはそうなのかもなあ。

980名前は開発中のものです。:2008/11/07(金) 02:21:09 ID:0eofhGUn
>>948
とりあえずここ人いるのは分かったし
質問があればみんなケンカしつつも答えるんじゃないかね

古いやり方も理解のために経験しとくのは俺はいいと思う
知らん方がいいって人もいるけどさ
981948:2008/11/07(金) 02:27:16 ID:t//oE7rA
>>980
てなわけで、いまんとこ
ttp://www.tnksoft.com/reading/classgame/index.htm
のサンプルをSDL+OpenGLで置き換えたサンプルを作ってるところなんだよ。
まとまったらどっかに上げて批評してもらう、とかどうかと思ったんだが、
それじゃただのおんぶにだっこかな。
982名前は開発中のものです。:2008/11/07(金) 02:59:03 ID:0eofhGUn
いんじゃないすかね
わざわざDX9からSDLに移植すんのも
全体を一通り触ることになるだろうから勉強になるとおも
ソースもざっと見、小さくて見通しがいい良いサンプルかと

つかやる気あるねー>>948は。ひとりでもあっという間に上達しそう
983名前は開発中のものです。:2008/11/07(金) 09:12:48 ID:QKzI3Kjp
>>975
メインループは C++ ネイティブコードで書いたシングルスレッド、ただし
その上で非プリエンプティブのスクリプト仮想マシンを複数動かす形に
するけどな。

非プリエンプティブなので、同期の心配とかはない。実行順序だけ気に
しとけば良い。

技術的には、C++ 側もコンテクストスイッチするようにできるけど、そこまで
やるメリットを感じないなぁ。むしろ、デバッグ辛くなりそうだし。
984948:2008/11/08(土) 00:43:22 ID:YKZ7JNVs
とりあえず、タスクシステムで作ったサンプルをでっち上げてみた。
実行ファイルとデータだけだけど、やりたいことを見てもらうのにいいかなと。
抽象的な議論が苦手なんだよね。ソースはもう少し整理して公開しようかと。

ttp://uproda11.2ch-library.com/src/11132771.zip.shtml
よかったら見てみてください。ウィルスチェックはしてるけど、一応自己責任で
お願いします。
985948:2008/11/08(土) 00:44:27 ID:YKZ7JNVs
げ、DLキーは task です。
986名前は開発中のものです。:2008/11/08(土) 00:50:44 ID:YKZ7JNVs
>スクリプト仮想マシンを複数動かす形
そうすれば不用意な自由度を与えなくてすむわけか。973がいいたいのもそのあたり?
プログラマとレベルデザイナとか役割分担するのには必要かもね。
987名前は開発中のものです。:2008/11/08(土) 01:42:18 ID:rZ00PGZ7
スレ的にはソースが無いと意味が無いのでは。
まぁソースをうpしたら、それを肴にして荒れまくるのは目に見えてる。
だから俺は正座して待つぜ。
988名前は開発中のものです。:2008/11/08(土) 02:01:27 ID:95q+SJ2O
>>978
協調的マルチタスクシステムって大抵はコンテキストスイッチくらい面倒見てくれるけどな
世界で一番売れた協調的マルチタスクOSであるWindows3.1もそう
989978:2008/11/08(土) 11:30:43 ID:jrTPhNiJ
>>988
コンテキストスイッチはタスクシステムでは不要というかもう実装されてるでしょ。
タスク自体がデータと振る舞いを持ってるわけだから、
タスクAの処理をしてるときはタスクAのデータ領域を参照するし、
タスクBに処理をしてるときはタスクBのデータ領域を参照するでしょ。
割り込みについてのことなら重い処理作ったら描画がスキップされるだけだから必要ないと思う。
ファイルIO等の重い処理は別スレッドに分けるとかで大抵解決する。
990名前は開発中のものです。:2008/11/08(土) 19:56:49 ID:xBkNDkUK
>>989
> コンテキストスイッチはタスクシステムでは不要というかもう実装されてるでしょ。
ない。

コンテクスト = スタック + レジスタ値だけど、所謂タスクシステムなるものは
メンバ変数やタスクコントロールブロックと名付けた独自領域にステートを
保存し、制御が移るたびに自前でそこから状態を復元する必要がある。
991989:2008/11/08(土) 20:29:38 ID:jrTPhNiJ
>>990
OSでいったらコンテキストスイッチはスタック+レジスタ値だけど
タスクシステムでいったらタスクのデータ領域
タスクのデータ領域といっているのは、>>990のいうメンバ変数やタスクコントロールブロックと名付けた独自領域と同じものです。
992989:2008/11/08(土) 20:33:10 ID:jrTPhNiJ
途中で書き込んでしまった。
>>990
コンテキスト=状況だからOSでいったらスタック+レジスタ値なんだけど
タスクシステムならデータ領域=メンバ変数やタスクコントロールブロックと名付けた独自領域が処理しているタスクに応じて切り替わっているから
最初から実装されていることになるんじゃない。
993名前は開発中のものです。:2008/11/08(土) 21:51:27 ID:xBkNDkUK
>>991
> OSでいったらコンテキストスイッチはスタック+レジスタ値だけど
> タスクシステムでいったらタスクのデータ領域
そんなオレオレ定義されても、話が混乱するだけだが・・・
994989:2008/11/08(土) 22:32:13 ID:jrTPhNiJ
>>993
そういうことをいいたいんじゃないのか、すまんかったよ。
コンテキストスイッチしたいってことはタスクシステムをマルチスレッド対応にしたいということでいいのか?
なかなか大変そうだけどやる価値はあるのかもしれない。
オレには無理そうだな。
995948:2008/11/09(日) 00:29:19 ID:nWf5qLS5
ソースと実行ファイルをまとめてうpしますた。
VC6のプロジェクトになってます。
五千パイ型、なにとぞご指導のほどをおながいします。
といってもサンプルを置き換えただけなんで意味ないかもしれんけど、一応。

ttp://uproda11.2ch-library.com/src/11133038.zip.shtml
DLキーは task です。

試した限りではまあまあ面白くプログラムできそうな感じではあるけど。
996名前は開発中のものです。:2008/11/09(日) 00:51:49 ID:G/ueWH6s
>>995
ゲームプログラミングで難しいのは、実行優先順位の管理より、オブジェクト間の
相互参照。タイミングがらみのバグが出やすい。

これだと、実質的にグローバル変数 (static CGameObject::objectlist & CreateEnumeration) で
管理してるようなものだから、むしろ手間かかりそうな気がするが。
997名前は開発中のものです。:2008/11/09(日) 00:51:52 ID:S2s0HGZS
>>995
軽く眺めた程度だが、これを元にしてるのか
ttp://www.tnksoft.com/reading/classgame/engine/01/013.php

タスクシステムの説明を見るたびに思うが
実行順位とやらは本当に必要か?必要なら何に使うのか?

そのページでは「キャラクターの重ね順などに柔軟に対応できる」と説明されているが
それはタスクの実行順位でまかなうべきことなのか?
998名前は開発中のものです。:2008/11/09(日) 00:55:07 ID:S2s0HGZS
新スレ立てようとしたが俺のホストは規制されてた
誰かよろ
隔離スレは必要だからな

-------------------------------------------
タスクシステム総合スレ part3
-------------------------------------------
タスクシステムについての議論、相談、質問、雑談などのスレです

part2 http://pc11.2ch.net/test/read.cgi/gamedev/1196711513/
part1 http://pc11.2ch.net/test/read.cgi/gamedev/1173708588/
999名前は開発中のものです。:2008/11/09(日) 11:52:18 ID:+pjnJyQQ
タスクシステム総合スレ part3

http://pc11.2ch.net/test/read.cgi/gamedev/1226199100/
1000名前は開発中のものです。:2008/11/09(日) 12:45:35 ID:JVmF+6vb
1000!
10011001
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。