タスクシステム総合スレat GAMEDEV
タスクシステム総合スレ - 暇つぶし2ch316:名前は開発中のものです。
07/09/02 14:53:28 O3956k1d
なんかGDGDだなこのスレw
でも、嫌いじゃないので、おいらもGDGDカキコ

タスクの良いところってのはその柔軟性だよな。
技術的にはぜんぜんたいした事をしてるわけじゃない。
とくに、このスレではタスク=リストになってるが、別にリストなんて「高度」な
事をしなくても、ただの配列でもまったく問題なく実現できる。
(無論効率は若干落ちるが、即時にデータ起動の並列もどきルーチンが
作れるのでいろんな環境で便利)

唯一凄いと思えるのは、歴史的な経緯かな。
プログラム主体の8bit時代において、
プログラムでデータを管理するのではなく、データで、プログラムを管理(プログラムを選ぶ)
すると言う、データ主体の発送が凄かった。


317:名前は開発中のものです。
07/09/02 16:25:59 OA6cGu0G
リストが高度とか、時代錯誤もは(ry


318:名前は開発中のものです。
07/09/02 20:53:53 O3956k1d
>>316
おいおいw
わざわざ「」付で言ってるんだから
比喩に決まってるだろ

リストが「高度」な技術と言える程、
タスクの実装に技術はいらないって意味だ
ゆとりじゃあるまいし、勘弁しておくれw


319:名前は開発中のものです。
07/09/02 22:16:13 UfEehfKc
茶でも飲んで落ち着けw

320:名前は開発中のものです。
07/09/02 23:01:13 O3956k1d
うむ、そうするか

∧_∧
( ´・ω・) ズズー
( つ旦O
と_)_)


321:名前は開発中のものです。
07/09/02 23:14:50 O3956k1d
せっかくなのでリストを使わないタスクをネタ代わりに投下
てきとーに作っただけなので、コンパイルすらしてないけどなw
#define MAX_TASK 256;
struct tcb{
void (*proc)(tcb*); //処理関数
int work[10]; //ワーク
};
tcb* make((void (*proc)(tcb*)){
//生成
for(int i=0;i<MAX_TASK;i++){
if(TCB[i].proc == null){
TCB[i].proc = proc;
return &TCB[i];
}
}
return null;
}
void del(tcb* deltcb ){
deltcb->proc = null;
}
void exec(){
//実行
for(int i=0;i<MAX_TASK;i++){
if(TCB[i].proc != null)TCB[i].proc(&TCB[i]);
}
}
tcb TCB[MAX_TASK];


322:名前は開発中のものです。
07/09/02 23:19:25 O3956k1d
void main()
{
//初期化
for(int i=0;i<MAX_TASK;i++)TCB[i].proc = null;
//実行
exec()
}


まあ、リストに対するアンチテーゼと、
こんなに短くてもそこそこ機能するってのが言いたかっただけなんだけどね
なんにせよ、タスク(というか、並列動作もどき)ってのは、そんなご大層なものじゃないんで、
もう少し気軽に使えてもいいと思うな。

323:名前は開発中のものです。
07/09/02 23:25:34 4YT1t12/
std::vectorとclass Hoge { virtual void Update() = 0; };なら
そのソースの1/3くらいで終わる

324:名前は開発中のものです。
07/09/02 23:34:48 O3956k1d
>>322
そうか、よかったな。

ただ、このソースは4KのRAMでも動くんだ。
あと、Cを始めて2日の初心者でも理解できるぞ。
ついでに言えば、C++のない環境でも動く。
別に煽ってるわけじゃなくて、316で書いたように
柔軟性が高いということが言いたいだけなんだ。

シンプルなロジックであるが故の柔軟性
かつ、高い並列性がタスクの凄いとこなんだよな

325:名前は開発中のものです。
07/09/02 23:44:30 O3956k1d
>ただ、このソースは4KのRAMでも動くんだ。

おっと、タスク数を256にしていたか、4Kじゃ動かんなw
まあ、意図はわかると思うんで、適当に読み替えてくだちぃ

326:名前は開発中のものです。
07/09/03 00:13:38 OKOrcl0B
うーん、まあ好きなように作ってればいいと思うよ

327:名前は開発中のものです。
07/09/03 00:50:28 eAiA8cQA
>>324
数メガの RAM と C++ コンパイラのある環境で得意げに >>321 みたいな
コードを書かないでいてくれるなら文句は無い。

328:名前は開発中のものです。
07/09/03 01:11:08 tpNXAe5A
>326
いや、無論自分自身は好きに作ってる。
ただ、タスク=LIST管理とかなってきてて、
デザパタとか絡ませる風潮がなんとなくいやなんだ。
もちろん、そういった事を否定するわけじゃなくて、
もっとシンプルなものって事が言いたいだけだよ。


> 数メガの RAM と C++ コンパイラのある環境で得意げに >>321 みたいな
> コードを書かないでいてくれるなら文句は無い。

いや、得意気もなにも普通に組むよ。
無論システムとしては組まないけどね。

というか、逆に聞きたいんだけど、並列ではないシステムで(要するにシングル)で組んでて、
一時的に、並列的な挙動が欲しい時って、どうやって組んでるの?
まさか、システムに組み込ませるわけじゃないよね?

自分はそういったことが頻繁にあるんで、
そんな中での小技テクとして、上記のようなコードをチョコチョコつかってる。
逆に言うと、タスクなんてその程度のもの。
無論、システム化してべったりって好きだけど、その環境だけで組めるわけじゃないからね。


329:名前は開発中のものです。
07/09/03 01:35:46 eAiA8cQA
>>328 >>323

330:名前は開発中のものです。
07/09/03 01:47:58 OKOrcl0B
>というか、逆に聞きたいんだけど、並列ではないシステムで(要するにシングル)で組んでて、
>一時的に、並列的な挙動が欲しい時って、どうやって組んでるの?
まさしく>>323

331:名前は開発中のものです。
07/09/03 02:06:52 tpNXAe5A
>>329
なるほど、STLに行くのか。
て事は基本的な方向性(末端でタスク生成)は変わらないんだよね?

ちなみに自分がかかわったプロジェクトでは、STLはメモリの消費量と、
ガベコレを意識できないプログラマがいて、使えなかった。
厳密には使えたんだが、STLの類は、みんな使うとなったら、とことん使うので、
あっという間に使用量が膨れ上がって、パンクしたw。
(搭載メモリは16Mな)
別の件でSTLはおろか、Cの標準ライブラリすらない環境もあったので、
頼らない組み方が基準にはなった。
確かに、つかえりゃ楽なんだけど、
Window以外は、鬼門なことがままあるからなあ>STL

あと、新人に理解させる期間が必要という現実的な問題もあるしなw

ま、タスクの話からは若干それたが、
329の環境が、STLが使えるような環境を基準に出来れば、それはいいことだと思うよ。
こっちは中々難しいんで、小技テクでごまかして進むしかないけどw

332:名前は開発中のものです。
07/09/03 02:37:16 eAiA8cQA
>>331
関数ポインタと固定ワーク領域(+無理やりキャスト)が仮想関数に
置き換わっただけで、基本的な考え方は同じ。

あと、新人に理解させるって点で言っても、関数ポインタや無理やりな
キャストよりも仮想関数のほうが自然で理解しやすいはず。特にアセンブラを
やらない今の時代では。

生配列と vector の違いについては今の話にはほとんど関係ないけど、
「それ何年前の話?」ってぐらいの時代遅れ感がする。
vector 出しただけで STL 全体の話になってたり、「ガベコレ」とか言ってる
あたりで理解も怪しいし。

333:名前は開発中のものです。
07/09/03 02:54:20 OKOrcl0B
>ちなみに自分がかかわったプロジェクトでは、STLはメモリの消費量と、
>(ry
もうこの辺って用途によるんじゃないかなぁ
360とかPS3みたいにメモリが贅沢な環境でも切り詰めりしなきゃならない場面もあるから
>>321みたいな実装になることもあるよ

勘違いして欲しくないのは、本来やりたいことってのが
大量の「関数と実行コンテキストのペア」を如何に管理するかって話なんだから
>>321の例にしても>>323の例にしても、所詮はその実現方法の1つに過ぎないことかな

逆に質問してみるけど
9割が128バイトのサイズのタスクと残りが1024バイトのタスクが混在するような状況下で
あなたはどうやって管理するんでしょうか

334:名前は開発中のものです。
07/09/03 02:58:58 sckJXuMq
まあvectorだと、「削除や挿入などの操作」と「タスクへのポインタの保持」が背反するんだけどな。
321みたいな配列系は、リスト用のポインタ変数すら削りたいほどメモリが逼迫してて、
順番の制御が要らないのならいいんじゃね?

335:名前は開発中のものです。
07/09/03 03:27:47 Ic41WPtX
>>332

> 関数ポインタと固定ワーク領域(+無理やりキャスト)が仮想関数に
> 置き換わっただけで、基本的な考え方は同じ。

なるほど、ここは了解っす。

> vector 出しただけで STL 全体の話になってたり、「ガベコレ」とか言ってる

いやいやw、実際使用する段になったら、vectorだけ使用してOKって話にはならんでしょ。
これがだめ、あれがOKって細かく指定するならよいんだけど、そこまでして
STL使うプロジェクトには参加したことないなぁ。それに制限するならSTLの意義が薄れてくるし。
(確かに、vector使えるだけでもかなり変わるとは思うけどね)

ガベコレについては、話が飛びすぎの感があったんで細かく触れなかったが、
メモリの断片化による、ガベコレの処理落ち、あと、メモリ確保エラーのコトな。
現在のSTLでこれらが一切起こらないことが保証されてるならいいけど、
そうでないなら、対処を知らない人のために、何らかの対策や方針が必要になる。
件のプロジェクトではそれがなくてヤバいことになった。


> あと、新人に理解させるって点で言っても、関数ポインタや無理やりな
> キャストよりも仮想関数のほうが自然で理解しやすいはず。

あー、ここは同意。
無理やりキャストよりは、言語使用に沿った概念のほうがいいからね。

336:名前は開発中のものです。
07/09/03 03:46:43 Ic41WPtX
>>333
基本的には1024byteのタスクを先に生成して(起動するまでSLEEP)から、128byteタスクの生成かな。
途中でどうしても、フルに使わなきゃならない場合は、グループでの生成と削除を行う。
この例だと、8タスクを1グループとして、生成と削除を行う。
大体、こんなかんじっす。

337:名前は開発中のものです。
07/09/03 03:48:53 eAiA8cQA
>>335
ほんと、胡散臭いな。 vector は許可が無いと使えないのが当たり前だと
思ってそうだし。

標準ライブラリに使用制限を付けるほうが異常でしょ?制限を付けるには
理由が要る。コンテナの動的メモリ確保に問題があって禁止するなら、
アルゴリズム系ライブラリまで "STL" とまとめて禁止することは無い。

C++ の言語仕様にも標準ライブラリにもガベコレは無い。 Boehm GC でも
使ってるの?

メモリの断片化がどうのこうの云うなら malloc も new も同じことなんだけど、
それらも使わないことにしてるの?
あー。 new が禁止になってるなら仮想関数を使わないのかな?

338:名前は開発中のものです。
07/09/03 04:13:34 Ic41WPtX
>>337
いや、なにをうさんくさがってるのか知らないけど、
自分の考えや方針と違う人がいるのがそんなに気に入らないのかな?

> ほんと、胡散臭いな。 vector は許可が無いと使えないのが当たり前だと
> 思ってそうだし。

そんなことは思ってもいないが、STL使用時はメインの人に確認はするよ。
まあ別に、どうでもいいけどね。

> メモリの断片化がどうのこうの云うなら malloc も new も同じことなんだけど、

別にmallocは禁止にしてないけど、ほとんど使わないね。
仮想関数は、c++が使える環境かどうかとメモリ量によるね


339:名前は開発中のものです。
07/09/03 05:14:29 eAiA8cQA
>>338
気に入らないのは、不確かな理由で複雑なコードを書いてしまうこと。

vector を使えない理由をいろいろと説明しようとしてくれていたけど、その理由の
真偽が胡散臭いってことね。

ただ、これ以上追究する気もなくなった。

340:名前は開発中のものです。
07/09/03 09:21:14 y2Xn2ykc
>>338
提示したソースが洗練されてるとは言わんが、
ほぼすべてのC環境で動くコードが、
最近の環境に適したコードではないからといって、
胡散臭がられるとは思わなかったw
短くて、美しいソースが正義とか思ってそうだね。

341:名前は開発中のものです。
07/09/03 09:50:46 OKOrcl0B
>>336
君のやり方って1フレーム中に
毎フレーム256個のタスクがアクティブかどうかチェックするための
オーバーヘッドが発生するんだけど(これ自体がそもそも重大な問題なのに)
そのメモリの割り当て方はそれを上長させますよ

342:名前は開発中のものです。
07/09/03 10:28:10 2Imr3kJv
>>340
id:O3956k1d = id:y2Xn2ykc なのはいいとして(レス番が一個ずつずれてるぞ)
胡散臭いと言われてるのはSTLとガベコレを混同してるid:tpNXAe5A = id:Ic41WPtXd の存在自体
であって、君のことじゃないだろう?

343:名前は開発中のものです。
07/09/03 11:23:55 VocmouaK
つか、なんで>>331でガベコレの話がいきなり出てきたわけ?

344:名前は開発中のものです。
07/09/03 11:40:25 ckJtc0Qf
>>331
>(搭載メモリは16Mな)
ドリーmあqswでfrgtyふじk

胡散臭がってる人とかPCの人には分らんかもしれんがコンシューマだと
プロジェクトによってはSTLはおろかC++も使えないことがあるよ。
C++許可でもnew禁止、とかさ。
古い人(ちょっと偉い人)がプロジェクトに混じるとC主体になったりするし。

>>340
正義がまかり通る職種ではないし、主義主張を煽るような発言は荒れるぜー。
プログラマは性格悪いからなw

345:名前は開発中のものです。
07/09/03 11:44:32 ckJtc0Qf
>>343
C++かSTLにガベコレなんて実装されてたっけ?
記憶にないんだけど。

346:名前は開発中のものです。
07/09/03 12:25:32 rM0ce6hj
>>344
ゲームじゃないけど
RAM128バイトでcコンパイラも無いターゲットで仕事したことあるぞ

347:名前は開発中のものです。
07/09/03 13:20:45 BR9raoz2
  /'           !   ━┓┃┃
-‐'―ニ二二二二ニ>ヽ、    ┃   ━━━━
ァ   /,,ィ=-;;,,, , ,,_ ト-、 )    ┃               ┃┃┃
'   Y  ー==j 〈,,二,゙ !  )    。                  ┛
ゝ.  {、  - ,. ヾ "^ }  } ゚ 。
   )  ,. ‘-,,'   ≦ 三  
ゞ, ∧ヾ  ゝ'゚       ≦ 三 ゚。 ゚
'=-/ ヽ゚ 。≧         三 ==-
/ |ヽ  \-ァ,          ≧=- 。
  ! \  イレ,、         >三  。゚ ・ ゚
  |   >≦`Vヾ        ヾ ≧
  〉 ,く 。゚ /。・イハ 、、     `ミ 。 ゚ 。 ・

348:名前は開発中のものです。
07/09/03 13:31:16 ckJtc0Qf
128バイト?キーチェーンとかでももう少しありそうなんだが。

つか、8bit以下のCPUならコンパイラよりもアセンブラだろ。
小さいならバイナリを打ち込んだりとか。

349:名前は開発中のものです。
07/09/03 22:41:28 l9Qlmw/p
ワークがちょびっとしかなくても
ROMが十分あればどうとでもなる

350:名前は開発中のものです。
07/09/04 02:25:05 +Mg349f+
もちろんアセンブラ
他に選択肢は無いし
ちなみに、CypressのCY7C63101か何かだった

351:名前は開発中のものです。
07/09/07 22:50:02 CXdTTUEg
時代錯誤のロートルはもう死んでくれ。
お前の糞テクニックなんて今はもう害悪にしかならんよ。

352:名前は開発中のものです。
07/09/10 00:23:29 QZRbzkCO
\|/
/⌒ヽ   / ̄ ̄ ̄ ̄ ̄ ̄
| ゜Θ゜)< そうでもないよ。
| ∵ つ \______
| ∵ .|
\_/

353:名前は開発中のものです。
07/09/12 13:27:57 ZYdwKK9S
>>346
それってPICだろ・・・・

354:名前は開発中のものです。
07/09/12 15:51:28 +wMsl3iC
>>353
Cypressの8bitマイコンです


最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch