質問

最近 Grand Central Dispatch を学んだところ、(GCD を使用した) マルチスレッド コードが非常に直感的であることがわかりました。ロックが必要ないという事実 (そして内部でロックのないデータ構造を使用しているという事実) と、API が非常にシンプルであることが気に入っています。

今、私は pthread について学び始めていますが、その複雑さに少し圧倒されてしまいます。スレッド結合、ミューテックス、条件変数 - これらはすべて GCD では必要ありませんが、pthread では多くの API 呼び出しが必要です。

pthread には GCD に比べて利点はありますか?より効率的ですか?GCD では実行できないことを pthread で実行できる通常の使用例はありますか (カーネルレベルのソフトウェアを除く)?

クロスプラットフォーム互換性に関しては、私はあまり心配していません。結局のところ、libdispatch はオープンソースであり、Apple はクロージャの変更をパッチとして GCC に提出し、clang はクロージャをサポートしており、すでに (e.x.FreeBSD) を使用して、Apple 以外の GCD 実装がいくつか見られ始めています。私は主に API の使用に興味があります (具体的な例があれば素晴らしいです!)。

役に立ちましたか?

解決

あなたが経験していること圧倒的な感じ.. GCDが発明された理由は、まさにます。

あなたがどの互換OSでコードを書いて、仕事にそれを期待することができますので、

は、最も基本的なレベルでのスレッド、pthreadsのがあるスレッドのPOSIX APIです。 (彼らは実際にAPIとしてpthreadsを使用した場合、私はわからないが)GCDは、スレッドの上に構築されています。一言で言えば、その主な欠点であること

- 私はGCDが唯一のOS XとiOS上で動作します信じています。

スレッドを多用すると、高いパフォーマンスを必要とするプロジェクトは、スレッド・プールの独自のバージョンを実装することに注意してください。 GCDは、あなたがumpteenth時間のために、車輪を発明(再)を避けることができます。

他のヒント

私から他の方向:使い始めました pthreads 私の願いは、最近、C++11 std::thread.現在、遊んでより高いレベルを構築しまうの 擬似ブthreadpool, もより抽象的な、インテルの スレッドブロックビル.私は考えるGCDを必要としないよりも高TBB.

少数のコメント:

  • まぁ,pthreadは なに複雑な 以上のGCD:その基本コア、pthread実は非常に少数のコマンドか:使用だけのものOPで95%+の機能である).のような低いレベルの図書館からのおしどのように使用するために。ることを忘れないでください、最終的には、図書館のようなGCDとTBB着、ネジのような図書館 pthreads または std::thread.
  • 時には、それな という方がどのように使用すると, を決定するに成功vsます。として実施主体者は、図書室、TBBはGCDのままお伝えしますすべてをその図書館が、やってみなけりゃ分からないし、実アプリケーションのコンテキストすべてであ 理論的利益.例えば、私がどのように簡単で使用 細かい粒度のparallel_for, 私はすぐに使用で課題はあると思ったき平行度.当然、私も、下記のパンフレットをご覧くださいTBB務を取り扱うすべてについての詳細は最適な負荷バランスやスレッドの配分についてどのような特徴がありますか? TBBを通じて発信したのですが、倍以上のシングル-レーバージョン! はありませんせTBB:今から振り返ってみれば、これは紛れもない場合の不正使用のparallel_for:それを読み直してみるときに印刷では、オーバーヘッドの活用parallel_forと指摘したが、以下、若干のが私の場合、コストのコンテキスト切り替え、追加機能通話を上回りに複数のスレッド)。だイケる一つの実行が速くなります。して再編成のアルゴリズムを使用量のスレッドオーバーヘッド。
  • あらかじめご了承ください?どのようにpthreadはなスレッドが存在しない以上、GCDはTBB?デザイナーがデザインのGCDはTBBなければならな 想定では、 の環境で実行する作業です。実際には、図書館な一般的な取り扱うことができる不思議unforseen使用例による。これらの一般的な実装となっています。のプラス側には、図書館でクエリー、ハードウェアの現在の走行環境への負荷バランス.ますので、サービスをご紹介します。?唯一の方法で知りに挑戦してみてくださいね。
  • はな学習には、低レベルのライブラリのように std::thread が高いレベルのライブラリが利用できますか?その答えは 賛同.最高レベルのライブラリは、 抽象化の実施内容.の 欠点 の高レベルの図書館も 抽象化の実施内容.利用の場合 pthreads, 私の展覧会意識の共有状態は、強豪選手が集まり,直接打撃ルーオブジェないように少なく抑えること、特に中大型サイズのプロジェクトで非常に簡単に取得す レースの条件 または メモリの断層.これらの問題からはどんどん遠ざかっていくご利用する場合は、より高いレベルですか?をしなければいけません。いんていくかを考える必要があり、その場合を取得しま雑になる詳細は、ライブラリの実装もあります。できることをご理解いただき、低レベルの構造、すべての図書館が実際に意味がある時点は、について考えることになるで実施し、ご利用の場合は下のレベルに発信します。もちろん、その時点で通常採用され、デバッグ対象の図書館に電話します。

その可能の実装:

  • TBB/GCD 図書館電話:最大の利益は、初心者のためのネジ.て低い参入障壁に比べ学習の低レベルの図書館です。しかし、そのものを無視し/非表示一部のトラップ用マルチスレッドに対応.動的負荷分散のままアプリケーションをより携帯用の追加の符号化。
  • pthreadstd::thread 電話:あとの通話を学ぶ、ものを使用していくかに注意を細かく深い意識がどのような応用ます。だが理解できるスレッドでこのレベルのApiの高レベルのライブラリは確かに良いですね。
  • シングル-ネジ付きアルゴリズム:を忘れずに簡単な単一のネジ付きセグメントほとんどの用途では、単一スレッドがより分かりやすく、少ないエラーが発生しやすいよりマルチスレッドに対応.実際、多くの場合、その適切なデザインです。一方では、アプリケーションを通じて様々なマルチスレッディング段階およびシングルスレッディング段階なうことがあってはならない必要なマネジ付きます。

で最速? は、その驚くべき真実ができるのです。車速の特典-マルチスレッディングが必要になる場合があり大幅に再編成アルゴリズム.か否かに上回る費用が高い場合に依存します。

OhのOPた場合thread_poolは適しています。す場合:だってタイトルを必要としない多くのサイクルとなりループを計算するため、thread_poolのコスト以上にな熱しない)することも認識し、架空の関数呼び出しのようにラムダを通じてスレッドプールvsのシングルタます。

のためのほとんどのアプリケーション、マルチスレッディングの最適化ない時に存在するかチェックします。

GCD は Apple のテクノロジーであり、クロスプラットフォーム互換性が最も高いわけではありません。pthread は、OSX、Linux、Unix、Windows など、ほぼすべてのもので利用できます。これを含めて トースター

GCD はスレッド プールの並列処理用に最適化されています。Pthread は (あなたが言ったように) 並列処理のための非常に複雑な構成要素であるため、独自のモデルを開発する必要があります。pthread や並列処理のさまざまなモデルについて詳しく知りたい場合は、このトピックに関する本を手に取ることを強くお勧めします。

のような宣言的/補助的なアプローチと同様に、 openmp または インテルTBB GCD は非常に優れているはずです 恥ずかしいほど平行 問題があり、素朴な手動による pthread による並列ソートをおそらく簡単に打ち破ることができるでしょう。ただし、まだ pthread を学習することをお勧めします。同時実行性についてよりよく理解できるようになり、特定の状況に応じて適切なツールを適用できるようになり、さらに、世の中には pthread ベースのコードが大量に存在しますが、「レガシー」コードを読むことができるようになります。

通常:のpthread実装当たり1つのタスクがミューテックス(OS機能)を使用します。
GCD:   キューにグループ化ブロック当たり1つのタスク、。仮想CPUあたり1つのスレッドは、すべてのタスクを通じてミューテックスずにキューと実行を得ることができます。これは、パフォーマンスを向上させる必要があり、スレッド管理のオーバーヘッドとミューテックスのオーバーヘッドを低減します。

GCDは、スレッドを抽象化して、キューを派遣できます。それは、アカウントに利用できるプロセッサコアの数を必要な撮影をと考えるように、それはスレッドを作成します。 GCDは、オープンソースであるとlibdispatch図書館を通じて利用可能です。 FreeBSDは8.1のようlibdispatchを含みます。 GCDとCブロックは、AppleからのCプログラミングコミュニティへの市長の貢献です。私はGCDをサポートしていない任意のOSを使用しないでしょう。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top