2017-03-02 3 views
1

私の新しい作品は言語Elixirを使用します。ErlangとC言語のハイブリッドプログラミングを高い割合でCで使用することは可能ですか?

私はこの時点でもErlang環境で新鮮です。いくつかの調査では、CPU集中型コンピューティングのパフォーマンスにプラットフォームに問題があることがわかりました。

上記の状況でErlangをnifと置き換えても、Cコードが高い割合であってもかまいませんか?または、これを行うことができないいくつかの制限があります。

+0

参照[実行Cアーランでコードブロック(http://stackoverflow.com/q/3525457/2402272)。しかし、質問に完全に答えるかどうかはわかりませんが、私は質問の英語を解釈するのが非常に難しいためです。 –

+0

@JohnBollinger、私の英語のために申し訳ありません。私は慎重に私の質問を更新しています(多分また問題があります)。誤解を招いています。ErlangがCを使用できることを指しています。 – LoranceChen

+0

それはかなり主観的な質問です。投票に近づく。 –

答えて

1

the warning about long-running NIFs in the documentation

このマニュアルページの先頭に警告テキストで説明したように

、それはネイティブ関数が比較的速い返し極めて重要です。ネイティブ関数が動作するのに必要な正確な最大時間を与えるのは難しいですが、通常、よく動作するネイティブ関数は1ミリ秒以内に呼び出し元に戻ることです。これは、異なるアプローチを用いて達成することができる。ネイティブ関数で実行するコードを完全に制御できる場合は、作業を複数のチャンクに分割し、ネイティブ関数を複数回呼び出すことをお勧めします。ただし、サードパーティのライブラリを呼び出す場合など、これは常に可能なわけではありません。

enif_consume_timeslice()関数を使用して、ランタイムシステムにNIF呼び出しの長さを通知できます。 NIFが非常に速く実行されない限り、通常は常に使用されます。

「NIFを生成する」、「スレッドNIF」、および「ダーティNIF」という3つの方法が提案されています。

+0

この記事は 'nif'に良い印象を与えるのに十分です。 – LoranceChen

5

Erlangから計算量の多いCコードを実行する最も簡単で安全な方法は、Cコードをスタンドアロンの実行可能ファイルとして書き、それをポート経由でErlangに接続することです。詳細は、http://erlang.org/doc/tutorial/c_port.htmlを参照してください。

+0

EVMが 'nif'でクラッシュするのを避けることができるようですが、率直に言って、それは私にとっては簡単ではないと思う(私は初心者です).BTW、Cプログラムの多くのポートを作成するか、 1つの大きなファイルに公開し、1つのポートを公開します(フォームはシナリオを示していますが、コード部分を示しています)。 – LoranceChen

1

3つ目の方法もあります。Erlangノード間プロトコルで通信するスタンドアロンのErlangノードとしてCコードを実行できます。

参照:http://erlang.org/doc/tutorial/cnode.html

関連する問題