2

起動時に引数として収集/計算されたデータを必要とするワーカープロセスがあります。これは、再起動時にも必要になります。初期化コードはどこに置くべきですか?スーパーバイザーの初期化の内部?またはモジュールの内部start_link、またはinit?これに関して、Erlangにベストプラクティスはありますか?

4

1 に答える 1

2

gen_serverコンポーネントに重大な状態がある場合、または再計算/再収集できない状態がある場合は、通常、その状態をgen_server自体に保持することは避けます。代わりに、外部のprocess/etsテーブルで状態を維持することを選択します。このアプローチを使用する場合は、etsテーブルが外部プロセス(確実に死ぬことはない)によって作成されていることを確認してください。たとえば、アプリケーションプロセス-または-のinitメソッドでetsテーブルを作成します。 gen_serverを使用し、「ets:give_away / 3」メソッドを使用して外部プロセスに渡します(もちろん、テーブルがgen_serverのinitメソッドですでに作成されているかどうかを確認する必要があります)。そうでない場合、etsテーブルは破棄されます。プロセスが終了したとき。

于 2010-11-15T03:30:54.317 に答える