1

iOS開発サイトで並行性プログラミングガイドを読んでいます

「スレッドから離れる」セクションに移動すると、Appleは言った

スレッドは何年も前から存在しており、引き続き使用されていますが、複数のタスクをスケーラブルな方法で実行するという一般的な問題を解決することはできません。スレッドを使用すると、スケーラブルなソリューションを作成する負担は、開発者であるあなたの肩に直接かかります。作成するスレッドの数を決定し、システムの状態の変化に応じてその数を動的に調整する必要があります。もう1つの問題は、アプリケーションが、使用するスレッドの作成と保守に関連するコストのほとんどを負担することです。

私の以前の学習に従って、OSはプロセススレッド管理を処理し、プログラマーは必要に応じてスレッドを作成および破棄するだけです。

違いますか ?

4

2 に答える 2

1

いいえ、それは間違いではありません。つまり、スレッドを使用してプログラミングしている場合、ほとんどの場合、プログラマーがコードに配置する特定の条件に基づいて動的にスレッドを作成します。たとえば、素数の検索はスレッドで分割できますが、スレッドの作成と破棄はプログラマーが行います。あなたは完全に正しいです、それはあなたが言っていることをより記述的で精巧な方法で言っているだけです。ああ、スレッド管理については、開発者が、ほとんどの場合、ユーザーが大量のスレッドを作成する必要があることに気付いた場合、スレッドのプールを生成してそれらを使用する方が安価な場合があります。

于 2012-07-12T06:24:44.123 に答える
0

実行するタスクが100あり、すべて独立した(タスクの期間中)データを使用するとします。開始するすべてのスレッドには、かなりのオーバーヘッドがかかります。したがって、コアが2つある場合は、2つのスレッドのみを開始する必要があります。これは、とにかく実行されるのはそれだけだからです。次に、両方のスレッドを実行し続けるために、これらの各スレッドにタスクをフィードする必要があります。100コアの場合、100スレッドを起動します。仕事を50倍速く終わらせることはオーバーヘッドの価値があります。

したがって、昔ながらのプログラミングでは、2つの仕事をしなければなりません。コアの数を確認する必要があります。また、スレッドが実行を継続し、コアを無駄にしないように、各スレッドにタスクをフィードする必要があります。(100コア以上の場合、これは1つのジョブになります。)

私はAppleがあなたのためにこれらの2つの厄介な仕事を引き継ぐことを提供していると信じています。

あなたの仕事がデータを共有するなら、それは物事を変えます。2つのスレッドが実行されている場合、一方が他方をブロックできます。2コアのマシンでも、3つ以上のスレッドを実行すると料金が発生します。100個のスレッドを一度に緩めることは、少なくとも2個のスレッドがブロックされない可能性を高めるため、理にかなっていることに気付く傾向があります。これにより、ブロックされた1つのタスクがスレッド内の残りのタスクを保持するのを防ぎます。スレッドのオーバーヘッドで代償を払いますが、CPU使用率が高い場合は元に戻します。

したがって、この機能は非常に便利な場合とそうでない場合があります。並列プログラミングには役立ちますが、非並列並行性(マルチスレッド)では妨げになります。

于 2012-07-12T15:09:01.460 に答える