2011-03-02 1 views
2

私は状態が完全に読み込み専用で、etsテーブルとcompiled moduleで構成されるerlangプロジェクトを持っています。コードの開始時にテーブルを構築するのに数秒かかります。はOTPが必要ですか?

これをパッケージ化して他のアプリケーションで使用する最良の方法は何ですか?考慮すべき

いくつかの他の事:

  • そこにはデータ競合問題や状態変化がないので、gen_serverの必要がないかのように思えます。
  • 私はapplication:start/1に電話して「ただ仕事」をするのが好きです。
  • 一部のプロセスでは、etsテーブルを所有する必要があります。私はそれをクライアントコードに任せてはいけないようです。

上記は、私がアプリケーションを作成すべきだと思う、と上司のinit/1関数からセットアップコードを呼び出すために私をリードし、これはそれにアプローチする愚かな方法である場合、私はわかりませんよ。

答えて

5

モジュールが完全に静的な場合、そのようなアプリケーションではプロセスは必要ありません。 OTPでapplicationの動作を実装する場合は、アプリケーションのメインプロセスにETSテーブルを直接接続する必要があります(アプリケーションのテーブルを開始するには、start/2コールバック)。そうすれば最小のプロセスモデルが得られ、supervisorgen_serverの両方をスキップすることができます。

必ずOTPを使用する必要がありますが、必ずしもsupervisorまたはgen_serverを指定する必要はありません。

appmonを使用すると、アプリケーションのプロセス階層を表示できます。

+0

私はそれが好きです!入力いただきありがとうございます。 :) –

+0

よろしくお願いします! –

+0

私はちょうどこれを行うために行き、開始コールバックが '{ok、Pid}'を返す必要があることを認識しました。通常、 'Pid'はスーパーバイザープロセスのトップを紹介します。それが私の場合に存在しなければ、 '{ok、self()}'を返すべきですか? –

2

標準的なOTPアプリケーションとしてまとめてください。 gen_serverは、状態を維持することではなく、要求を処理できるサーバーを持っていることになります(理由はimho;)のためgen_stateと呼ばれていません)。 OTPアプリを作成し、他の人と同じ方法で使用できるようにします。

+0

普通のモジュールではないステートレスな 'gen_server'の例を考えてもいいですか?過去に私は常に状態を動作の使用の前提条件とみなしてきました。 –

関連する問題