LLVMをネイティブコードジェネレータとして使用するErlangの軽量プロセス(「グリーンスレッド」)をサポートした並列言語の設計を検討しています。軽量プロセスは、ネイティブOSスレッドにM:N形式で割り当てられ、スレッド間のワークスチールが可能でなければならない(すなわち、プロセスは、必要に応じてスレッド間で渡すことができるデータ構造によって表されるべきである)。非常に多数のプロセスが同時に存在する可能性があるので、プロセスは多量のメモリを占有してはならず、それらの間のコンテキスト切り替えはできるだけ速くすべきです。さらに、コンテキストスイッチ中に軽量プロセスを「一時停止」するか、またはガベージコレクションが発生する場合は、むしろ単純でなければなりません。私はErlangがLLVMバックエンドを持っていることを理解していますが、その実装についての文献はほとんど見つかりません。誰かが私にこれがどのように可能かもしれないかを記述することができますか?LLVMは "グリーンスレッド" /軽量プロセスを実装するための機能を提供していますか?
答えて
私はLLVMまたはErlangに特定の経験はありません。
しかし、PARLANSEというプログラミング言語でこのようなシステムを実装しました。 はい、コンテキストスイッチを安くすることは困難です。この時
詳細はSO答え:私はLLVMの持っているhttps://stackoverflow.com/a/999610/120163
何少し知識が、それは難しいかもしれない示唆しています。何を 生成する必要がありますコンテキストの切り替えコードです。私はLLVMが直接 をサポートしているかどうかはわかりません。 という純粋なCコードを生成するときには簡単なことではありません。なぜなら言語プリミティブはマシン/スレッド の状態をうまく理解できないからです。
彼はここでは、C + +の14の機能をサポートしようとしているClangは、確かに "C + +ネイティブ"スレッドに遭遇する必要があります。それを可能にするためにコンテキスト切り替えのサポートが必要なので、多分誰かが問題を解決している、または既に持っているかもしれません。
LLVMは、この種のシステムの実装に直接関係しません。 LLVMのIRよりも低いような構造を持つ言語のフロントエンドはたくさんあります。
LLVMは単なる実行スレッド用のネイティブコードを生成するコンパイラ技術です。コンテキスト切り替えの実装、スタックの適切な設定(サボテンのスタックやその他の技術)、その他の懸念事項は、主にランタイムと環境の責任です。
1つの例外は、必要に応じてスタックを拡張するためのランタイムコールの合成をサポートし、潜在的にスタックを非連続領域に分割することです。コメントに示されているように、LLVMはそれほどうまくテストされていませんが、これをサポートしています。ただし、フロントエンドはLLVMのサポートを必要としないようにスタックの使用を制御することもできます。
- 1. Google Guava /機能的コレクション型の実装を提供する
- 2. 基本リフレクションを使用した軽量のシグナルスロット実装はありますか?
- 3. F#型のプロバイダは、オブジェクト・リレーショナル・マッピングを実装するための良い基礎を提供しますか?
- 4. オリエンテーションに基づいて異なる機能を提供していますか?
- 5. Facebookはアプリケーションにどのような機能を提供していますか?
- 6. Mirahはどのようなメタプログラミング機能を提供していますか?
- 7. Atlassian Stashはpastebin/GitHubのような機能を提供していますか?
- 8. firefoxまたはchromeはSSLセッションを開くための拡張機能のAPIを提供しますか?
- 9. 移植可能で軽量な彗星サーバーの実装は何ですか?
- 10. タイムデルタ機能を提供するライブラリはありますか?
- 11. REstful APIを実装するための最高の軽量/高性能組み込みWebサーバー
- 12. 軽量スレッドセーフスケジューラの提案
- 13. orientdbコミュニティバージョンは分散クラスタリング機能を提供していますか?
- 14. XTextが提供しないANTLRの機能は何ですか?
- 15. openfireサーバはMine機能を実装していますか?
- 16. ユーザー提供の統合機能に "eval"を使用していますか?
- 17. 結果に同義語を提供する検索機能または修正を提供する
- 18. DOM APIはNodeインタフェースを実装するHTMLTitleオブジェクトを提供しますか?
- 19. GAEはデフォルトの量的濫用保護を提供していますか?
- 20. Webページ上でXMPPチャットを実装するヒント - 軽量
- 21. Linuxで現在のプロセス数を取得するための軽量な方法はありますか?
- 22. 実行間の機能を提供するRubyスクリプトをテストするには?
- 23. .NET 3.5でPub/SubまたはSignalR機能を実装していますか?
- 24. WCFでキャッシング機能を実現するための提案
- 25. Silverlight WebBrowserコントロール。 WindowsとMacで同じ機能を提供していますか?
- 26. なぜjavaは、インターフェイス内のインターフェイスを宣言するための機能を提供します
- 27. ASP.Net 3.5の機能をSharePoint 2007に提供するためのサポート可能なオプションは何ですか?
- 28. Herokuはバックグラウンドイメージを提供しませんが、localhostは機能しますか?
- 29. ディレクティブの内部テンプレートのng-clickは機能を提供していません
- 30. 忘れてしまったパスワード機能を実装するための楽な方法は何ですか?
分割スタックが必要な場合があります。 GCCはそれらを持っているので、おそらくLLVM –