タスクシステム

昨日の所。なんかおかしいと思ったら4番が微妙に話題がずれてるのか。これだけじゃ他タスクにメッセージを送ることはできても他タスクの情報参照ができないわけで。

5番、生のポインタは持たない方向で話を進めると各オブジェクトは「ユニークなID」を持ち、他タスクの情報はIDの形で保持し、このIDを用いて対象のポインタを得ることで他タスクへアクセスする。ってことでオブジェクトは生成時にIDを割り振られて自分へのポインタを登録しとく必要がある。
これで、deleteされた領域にアクセスすることはなくなる、はず。

タスク間の依存はできるだけ減らしたい。そのためにどうするのかって話。IDを使えば安全に他のタスクにアクセスできるってことがわかった、しかし、それを使って相手の中身をいじったりするのは、そのタスク間にかなりの依存関係が生じることになる。できればそれは避けたい。
よってIDから得られるポインタでは対象を変更しないという前提でシステムを設計するのがよさそう。

前回の話題4番に戻るけどタスク間でメッセージをやり取りする方法。タスク間の通信で必要な機能を上げると

  1. 特定の相手にメッセージを送る。
  2. 不特定の相手にメッセージを送る。
  3. 自分にメッセージを送る(必要?)。

1、相手が特定されてるなら当然自分は対象タスクのIDを持ってるのでそれを使ってメッセージを送る。この場合即時にメッセージを相手に届けるか、メッセージを下流に流して相手の好きな時に勝手に受け取らせるか、の2種類がある。
2、相手が不特定なら即時に送ることはできない。メッセージを下流に流すだけ。
3、自分の状態遷移とかに使えるかも。それだけ
後、自分が送ったメッセージが誰かに受け取られたかどうかを確認する必要がある場合があると思うけど、この場合送り元のIDをメッセージに含めておいて1番を使って通知してもらえばいい。
不特定で多数の相手がメッセージを受け取る場合を考えると、メッセージは受け取っても削除しないでさらに下流に流す必要がある?あと一周して戻ってきたメッセージは削除しないといけない?そうすると全部のメッセージに送り元IDつけないとなぁ…。
この辺は適当に頭の中で考えただけなんでこれでうまくいくかについては知らない。足りない機能がありそう。
タスクシステムの話はここで一旦終了。
実装してみないことにはわからない部分が多すぎ。