2-2: αテスト-2
次に寄せられた要望は、当たり前のものでもあり、
それを効率的に行なうには、サーバ権限により、あるいは他の権限により、そのサイトに存在するページに現われる語句のインデックスを作成する必要があった。それを行なうには字句解析が必要であり——それ自体はもちろん可能だが——、加えてサーバとDBMSの統合が必要だった。
さらには、wormが保持するキーワードと字句解析の齟齬への対応も必要だった。字句解析の機能が、たとえば「字句解析」を「字句」と「解析」としており、wormにおいては「字句解析」がキーワードとなっているような場合への対応が必要だった。これに対応するには、wormが保持するキーワードに対しても字句解析を行ない、その結果の and あるいは or を検索の結果とする必要があった。
これらは不可能ではないが、サーバの資源を消費する。そのため、サーバの本来の機能であるページ参照の解決とデータの転送に影響を与えることを懸念した。
「どこも高スペックのサーバを使っていれば、こんなのは問題じゃないんだが」
しかし、それを期待することは、あるいは前提とすることはできなかった。
他に方法がないわけでもなかった。一つのwormの検索結果を、そこに存在する他のwormにブロードキャストする方法もあるだろうし、より簡単にwormが参照する
だが、
「C言語のflockを直接叩ければいいんだが。あるいはセマフォが確実に、即座に実行されれば」
しかし、それは実装上困難な問題ではあった。wormの実行系からできるだけ直通にする方法はある。FORTH 83-Standardを参考にしたのも、そのシンプルさから、ここでは利点になるように思えた。あとは、Javascriptの変種の実行系において適宜複数回ロックされているかどうかを確認し、デッド・ロックを回避するしかなかった。
一つの確実な解決方法は、シリアライズであった。しかし、それはwormが各々プロセスとして動いている現状の実装を変える必要があった。シリアライズが行なえるなら、wormの実行系を実行しているJavascriptの変種の実行系も、各々プロセスとして動いているという無駄を排除できることにも繋がる。問題は、どのようにシリアライズをするかだった。
仮にwormの到着順に実行するというシリアライズを行なった場合——これが一番簡単そうではあったが——、混雑した場合の待ち時間の予測が立たないという問題があった。そして、個々のwormが自律的に動作しなくなるため、待ち時間によっては一旦別のサーバに退避することも困難になるように思えた。
到着したwormの先頭部分に到着時刻を記録し、wormの実行系を実行しているJavascriptの変種の実行系において経過時間を求め、一定時間を経過していたならwormの移動の機能に実行を移す方法はあった。
「ロックとこちらとどちらが確実で、さらには簡単か」
シリアライズは、Javascriptの変種の実行系の動作を大きく変える必要があった。なにより、wormの自律性が奪われるのは、歩としては避けたかった。それが最善の選択ではないとしても。
教授から、一週間、ワークステーション一台を専用に使う許可を得ると、歩は両方のバージョンを作り、高負荷下での実験を行なった。シリアライズを検討に加えたことは無駄ではなかった。実行されるwormの数の上限を制御できるようになったからだった。それは、要望ではなく懸念として送られてきていたものに対応することでもあった。
新規登録で充実の読書を
- マイページ
- 読書の状況から作品を自動で分類して簡単に管理できる
- 小説の未読話数がひと目でわかり前回の続きから読める
- フォローしたユーザーの活動を追える
- 通知
- 小説の更新や作者の新作の情報を受け取れる
- 閲覧履歴
- 以前読んだ小説が一覧で見つけやすい
アカウントをお持ちの方はログイン
ビューワー設定
文字サイズ
背景色
フォント
組み方向
機能をオンにすると、画面の下部をタップする度に自動的にスクロールして読み進められます。
応援すると応援コメントも書けます