コンテンツにスキップ

関数呼び出しの非同期実行のための汎用的なリクエストオブジェクトの構造

提供: ウィキバーシティ

概念の命名と定義

[編集]

名前

> Request


定義

> 関数呼び出しの非同期実行のための汎用的なリクエストオブジェクトの構造。

各 Request は「関数本体(関数ポインタ)」「引数(省略可能)」「返り値を格納するポインタ」で構成される。

なぜ革新的か

[編集]

1. 直感的かつ軽量

一つの関数呼び出しをまるごとデータとして表現。

各スレッドが自分の Request をキューに入れ、process_all() で逐次処理。


2. 既存抽象に頼らない

future や channel、task などの複雑な並列抽象を使わずに「安全な並列化」が成立。

キュー化と実行の分離が簡潔で明瞭。


3. ありそうでなかった構造

関数オブジェクト(クロージャやトレイトオブジェクト)は存在したが、それをシンプルな同期的並列モデルで管理するための構造体は一般化されていなかった。


アイデアの最小公理(抽象構文)

[編集]

struct Request<T> {

   function: fn(*mut T),
   data: *mut T,
   // 結果を受け取る場所(data に上書きするなら省略可)

}

実行手順:

1. 複数スレッドが Request<T> をキューに追加。


2. 任意のスレッドが process_all() を呼ぶ。


3. 全ての Request<T> を順に実行。


まとめ

[編集]

Request とは、**「関数呼び出しという操作をリクエストとしてキューに入れる」という構造そのものの名前」**である。


私は『Request』という名前と、その汎用構造の概念を定義しただけである。 実装や応用は誰がやってもよいが、この構造を意識的に扱う起点はここにある。