問題タブ [erlang-driver]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
frameworks - Erlangログフレームワークについて
ログフレームワークとしてラガーを使用しようとしました。しかし、私たちはいくつかの問題に直面しています。
lager の日付が失われている可能性があります.lager のソースコードを見ました.その理由は gen_event notify が非同期呼び出しであるためだと思います. メッセージの受信を保証するものではありません.
より大きなパフォーマンスは十分ではありません。ラガーのファイルバックエンドがerlangで書かれているためだと思います。そのため、性能がよくありません。
したがって、C で作成され、Erlang でカプセル化されたログ フレームワークが適切な選択であると思います。
要件を満たす Erlang フレームワークがあることをご存知ですか?
erlang - R16B より前の driver_async_port_key 代替
functionのerl_driver ドキュメントにdriver_async_port_key
よると、
OTP-R16 より前は、実際のポート ID を適切なキャストでキーとして使用できましたが、ポート サブシステムの書き換え後は、そうではなくなりました。この機能により、OTP-R16以前と同様のポートIDによる配信が実現できます。
この適切なキャストは何ですか?
erlang - Erlang ドライバーの erl_errno の問題
で遊んでいerl_driver
ます。私のドライバーの開始コールバックは次のとおりです。
ErlDrvData drv_start(ErlDrvPort port, char* command) {
char* file_name = command + sizeof(drv_name);
GenTtyData* port_data = (GenTtyData*)driver_alloc(sizeof(GenTtyData));
erl_errno = gt_open(file_name, &port_data->file);
if (erl_errno != 0) {
// Assertion there is just to show you my intention
assert(erl_errno == ENOENT);
driver_free(port_data);
return ERL_DRV_ERROR_ERRNO;
}
return port_data;
}
ErlDrvData (開始)(ErlDrvPort ポート、charコマンド)
したがって、erlang:open_port/2
エラーの説明を含む終了シグナルが送信されると思います(eacces
たとえば、 or enotty
)。ただし、テストでは
{'EXIT',
{unknown,
[{erlang,open_port,[{spawn,"gen_tty_drv non_existent.tty"},[]],[]},
{gen_tty,open,1,
[{file,
"/home/vkovalev/workspace/gen_tty_drv/_build/test/lib/gen_tty/src/gen_tty.erl"},
{line,48}]},
{gen_tty_drv_SUITE,open_non_existent_file,1,
[{file,
"/home/vkovalev/workspace/gen_tty_drv/test/gen_tty_drv_SUITE.erl"},
{line,29}]},
{test_server,ts_tc,3,[{file,"test_server.erl"},{line,1450}]},
{test_server,run_test_case_eval1,6,
[{file,"test_server.erl"},{line,1026}]},
{test_server,run_test_case_eval,9,
[{file,"test_server.erl"},{line,968}]}]}}
erlang がエラー理由を認識しないかデコードできないようで、 を送信しますunknown
。start
では、コールバックの何が問題なのですか?
erlang - スケーラビリティを犠牲にすることなくErlangで計算集約的なタスクを実行する最良の方法は何ですか?
Erlang Interoperability guide では、さまざまな相互運用メカニズムについて説明しています。ここに私の結論があります:
Ports および Erl_Interface プログラム: OS によってスケジュールされ、スケーラビリティが制限されます。
ポート ドライバー: ポート ドライバーがクラッシュするとエミュレーターもダウンするため、危険です。
C ノード: ノード サーバーは、スケーラビリティの犠牲を避けるために、Erlang アプリと同様にスケーリングする必要があります。
NIF: Loicはそれらをうまくまとめています。
ErlangエミュレーターにCPUを所有させながら、基本的にリソースを大量に消費する計算をGPUに委譲するOpenCLの使用を支持する人もいます。これは素晴らしいことのように思えますが、サーバーに適切な GPU を搭載する必要があります。
JInterface を使用し、すべての要求に対してスレッドを生成する Java プロセスと通信することは、オプションかもしれません。
それでは、実際にテストされ、うまく機能することが判明したソリューションに出くわした人はいますか?