2

過去数か月の間に、iOS開発を行っている間、 ObjectiveCでデフォルトで提供されるいわゆるGrandCentralDispatchテクノロジーの使用に非常に慣れました。いくつかの簡単な呼び出しで、次のような素晴らしいことができます。

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0), ^{
    // Do stuff on the lowest priority queue here
    dispatch_async(dispatch_get_main_queue(), ^{
        // Do stuff with the above results here back in main thread/queue
    });
});

基本的に、カスタム優先度の他のスレッドのタスクを好きなときにフォークオフでき、スレッド間でオブジェクトを渡したり、スレッドを終了したり、結合したりするのにそれほど労力をかけることなく、結果を好きなように使用できます。ウィキペディアにとって、そのアプローチのより一般的な名前は「スレッドプールパターン」です。

並列処理の実現に関する限り、これは私が過去に使用した他の多くのソリューションよりも簡単だと思います(pthreadを考えていますが、ほとんどの言語で類似したものがあります)。「使いやすさ」の大部分は、iOSアプリ(OSXも?自分で作成したことはありません)がスレッドごとに実行ループとタスクキューを使用するため、作業を何かではなく個別のユニットに分離できるようになるという事実に由来すると思います。通常、ほとんどの言語では、空白のプログラムスケルトンから始めます。

したがって、問題は、他の言語のGCDのようなものがあるのか​​、それともAppleの世界の外で人気のあるモデルではないのかということです。私はClojure/JVMに特に興味があります。これは、おそらく類似している可能性のある並列化の抽象化を追加するためですが、他の言語についても同じことを知りたいと思います。

4

2 に答える 2

2

Grand Central Dispatch の心臓部はスレッド プールです。GCDはほとんどのIMOよりも優れていますが、ほとんどの言語には似たようなものがあります。最も一般的な同等の Java ライブラリは Fork/Join です。Clojure には、特定のタスクを処理するための多数の同時実行関数も含まれていますが、より一般的な同時実行には、Fork/Join が必要です。

于 2013-01-04T07:36:36.227 に答える
0

ディスパッチ API は C であり、オープン ソースです。したがって、objC ランタイムの一部ではありません (ただし、ランタイムはディスパッチ API を使用します!)

似たようなもの..うーん....多分Windows 8のParallel Task Lib

于 2013-01-04T07:23:16.750 に答える