グランドセントラルディスパッチ( `libdispatch`)をWindowsで利用できるようにすることができますか?
-
02-10-2019 - |
質問
私はマルチスレッドを検討しています、そしてGCDは 多くの 使用してソリューションを手動で書き込むよりも優れたオプション pthread.h
と pthreads-win32
. 。ただし、ように見えますが libdispatch
最も新しいPOSIX互換システムに取り組んでいるか、すぐに作業するつもりですか... Windowsについてはどうですか?のチャンスは何ですか libdispatch
Windowsに移植されていますか?それが起こらないようにする障壁は何ですか?
それがそれになったら、何がそうなるでしょう 私 そのポーテージを事前に形成する必要がありますか?
編集: 議論を始めるために、私がすでに知っているいくつかのこと:
- Windowsでコンパイルするブロック互換のコンパイラが必要ですか?意思 plblocks それを処理しますか?
- LLVMを使用できますか ランタイムをブロックします?
- すべてを交換できません
pthread.h
ユーザースペースの依存関係libdispatch
携帯性のためのAPRコールで?または、または使用しますpthreads-win32
私は考えます…
編集1: 私はこれが完全に完全に不可能だと聞いています libdispatch
(どういうわけか)依存します kqueue
, 、Windowsで利用できないもの…これが真実かどうかを誰かが知っていますか?
解決
を見てみましょう : http://opensource.mlba-team.de/xdispatch/このプロジェクト(およびその他のサードパーティLIBS)は、LibdispatchをMacOSX以外のプラットフォーム(Windows、Linux)にもたらします
他のヒント
Libdispatchに相当するWindowsは、私の基本的な理解から、 並行性ランタイム 管理されていないコードの場合 テクノロジーのコレクション 総称して、 平行拡張機能 管理コード用。 GCDは両方とも同様の方法で抽象的な作業単位(または「タスク」)を抽象化するため、これらの両方に非常によくマッピングされているように思われます。
ちょっとした調査から、すでにポートにかなりの関心があるように見えますが、そのポートはかなり劇的な取り組みであり、基本的にAPIの別の実装になり、実際に元のコードと重要なコードを共有していない可能性があります。 libdispatch。 Libdispatchに、Windowsのクロスプラットフォームにすることを容易にするPOSIXの代わりに、Apacheポータブルランタイムに基づいてリブディスパッチを移植するという提案をいくつか見ましたが、これでさえ簡単な変更ではありません。
おそらく、これは決して小さな仕事ではないでしょう。
libdispatch on-pthreadsとpthreads on-win32、またはlibdispatch on-aprおよびapr on-win32ではなく、win32に直接libdispatchを実装する方が良いかもしれません スレッドプールAPI. 。良いニュースは、2つのAPIが十分に似ているので、おそらく自分でポートを実行できることです。悪いニュースは、正確な動作を達成するのを難しくする小さなセマンティックミスマッチがあるコーナーケースがおそらくたくさんあるということです。