ネイティブ コード ジェネレーターとして LLVM を使用する Erlang の流れで、軽量プロセス (「グリーン スレッド」) をサポートする並行言語の設計を検討しています。軽量プロセスは M:N 方式でネイティブ OS スレッドに割り当てられ、スレッド間のワークスティーリングが可能である必要があります (つまり、プロセスは、必要に応じてスレッド間で受け渡しできるデータ構造によって表される必要があります)。非常に多数のプロセスが同時に存在する可能性があるため、プロセスは多くのメモリを消費せず、プロセス間のコンテキストの切り替えはできるだけ迅速に行う必要があります。さらに、コンテキストの切り替え中またはガベージ コレクションが発生した場合に、軽量プロセスを "一時停止" するのはかなり簡単なはずです。Erlang に LLVM バックエンドがあることは理解していますが、その実装に関する文献はほとんど見つかりません。
2 に答える
0
私は LLVM や Erlang について特別な経験はありません。
しかし、私はそのようなシステムを PARLANSE と呼ばれるプログラミング言語で実装しました。はい、コンテキスト スイッチを安くするのは困難です。
この SO 回答の詳細: https://stackoverflow.com/a/999610/120163
私が LLVM について持っている知識がほとんどないため、LLVM は難しいかもしれません。生成する必要があるのは、コンテキスト切り替えコードです。LLVM がそれを直接サポートしているかどうかはわかりません。言語プリミティブではマシン/スレッドの状態をうまく取得できないため、純粋な C コードを生成する場合、これは確かに簡単なことではありません。
ここでの裏返しは、C++ 14 機能をサポートしようとしている Clang であり、確実に「C++ ネイティブ」スレッドに出くわす必要があります。それを可能にするには、コンテキスト切り替えのサポートが必要なので、おそらく誰かが問題に対処している、またはすでに対処しているでしょう。
于 2015-01-03T05:47:50.253 に答える