タグ付けされた質問 「concurrency」

コンピュータサイエンスでは、同時実行性は複数の計算を重複する期間で実行できるシステムの特性です。計算は、同じチップの複数のコアで実行されたり、同じプロセッサでプリエンプティブに時分割されたスレッドで実行されたり、物理的に分離されたプロセッサで実行されたりします。

14
Javaの同時実行性:カウントダウンラッチと循環バリア
私はを通読しているjava.util.concurrentのAPI、およびことがわかりました CountDownLatch:1つ以上のスレッドが、他のスレッドで実行されている一連の操作が完了するまで待機することを可能にする同期補助。 CyclicBarrier:一連のスレッドが互いに共通のバリアポイントに到達するのをすべて待機できるようにする同期補助。 私にはどちらも平等に見えますが、それだけではないでしょう。 たとえば、CoundownLatch, the countdown value could not be reset, that can happen in the case of CyclicBarrier。 2つの間に他の違いはありますか?誰かがカウントダウンの値をリセットしたいところ はuse casesどこですか?

17
デッドロックとは何ですか?
マルチスレッドアプリケーションを作成するときに発生する最も一般的な問題の1つは、デッドロックです。 コミュニティへの私の質問は次のとおりです。 デッドロックとは何ですか? それらをどのように検出しますか? それらを処理しますか? そして最後に、どのようにしてそれらが発生するのを防ぎますか?

5
ConcurrentHashMap値の反復はスレッドセーフですか?
ConcurrentHashMapの javadoc は次のとおりです。 通常、取得操作(getを含む)はブロックされないため、更新操作(putおよびremoveを含む)と重複する場合があります。取得は、その開始時に保留されている最後に完了した更新操作の結果を反映します。putAllやclearなどの集約操作の場合、同時取得は一部のエントリのみの挿入または削除を反映する場合があります。同様に、イテレータと列挙は、イテレータ/列挙の作成以降のある時点でのハッシュテーブルの状態を反映する要素を返します。ConcurrentModificationExceptionはスローされません。ただし、イテレータは一度に1つのスレッドのみが使用するように設計されています。 どういう意味ですか?2つのスレッドで同時にマップを反復しようとするとどうなりますか?反復中にマップに値を追加またはマップから削除するとどうなりますか?

3
HttpClientを同時に使用しても安全ですか?
私が使用できるすべての例でHttpClient、1回限りの呼び出しに使用されます。しかし、複数の要求を同時に行うことができる永続的なクライアント状況がある場合はどうなりますか?基本的に、client.PostAsyncの同じインスタンスに対して一度に2つのスレッドを呼び出しても安全ですかHttpClient。 私は実際にここで実験結果を探しているわけではありません。実際の例としては、単純にまとまりのあるもの(および永続的なもの)である可能性があり、失敗した例の場合は、構成の問題がある可能性があります。理想的には、HttpClientでの並行処理の問題に対する信頼できる回答を探しています。

6
iPhone-Grand Central Dispatchメインスレッド
私は私のアプリで大規模な中央ディスパッチを使用して成功していますが、次のようなものを使用することの本当の利点は何ですか? dispatch_async(dispatch_get_main_queue(), ^{ ... do stuff あるいは dispatch_sync(dispatch_get_main_queue(), ^{ ... do stuff つまり、どちらの場合も、アプリが実行される場所であるメインスレッドで実行されるブロックを起動しているため、これは負荷の軽減に役立ちません。最初のケースでは、ブロックを実行するタイミングを制御できません。ブロックを発射してから0.5秒後にブロックが実行されるケースを見てきました。2番目のケースは、 [self doStuff]; 正しい? 君たちはどう思う?

5
非同期の静的メソッドは、静的クラス変数を変更しない場合、スレッドセーフですか?
私はあなたがされた静的メソッドがあればと思いましていない同期が、ないではない任意の静的変数を変更し、それは、スレッドセーフでありますか?メソッドがその中にローカル変数を作成する場合はどうでしょうか?たとえば、次のコードはスレッドセーフですか? public static String[] makeStringArray( String a, String b ){ return new String[]{ a, b }; } したがって、2つのスレッドが継続的かつ同時にメソッドを呼び出す場合、1つは犬(「グレートデーン」と「ブルドッグ」など)で、もう1つは猫(「ペルシャ」と「シャム」など)で、猫と犬を取得します同じ配列で?または、猫と犬がメソッドの同じ呼び出し内に同時に存在することはありませんか?

4
グリーンレット対。スレッド
geventsとgreenletは初めてです。私はそれらをどのように使用するかについての良いドキュメントを見つけましたが、グリーンレットをいつどのように使用するべきかについて正当化するものはありませんでした! 彼らは本当に何が得意ですか? プロキシサーバーで使用するかどうかは良い考えですか? なぜスレッドではないのですか? それらが基本的にコルーチンである場合、それらがどのようにして並行性を提供できるかについて、私は確信がありません。

10
ライブロックの良い例は?
ライブロックとは何なのかは理解していますが、コードベースの良い例を誰かが持っているのではないかと思いました。また、コードベースで言うと、「廊下で2人がお互いを乗り越えようとしている」という意味ではありません。それをもう一度読んだら、昼食を失うだろう。

12
複数のスレッドからjava.util.HashMapから値を取得しても安全ですか(変更なし)?
マップが作成され、一度初期化されると、再度変更されることはありません。ただし、複数のスレッドから(get(key)を介してのみ)アクセスされます。java.util.HashMapこのように使用しても安全ですか? (現在、私は喜んで使っていjava.util.concurrent.ConcurrentHashMapて、パフォーマンスを向上させるために何を測定する必要がありませんが、シンプルであれば、単純に興味津々HashMap十分であろう。したがって、この質問がありません「?1は、私が使用すべき」またそれがパフォーマンスの問題です。むしろ、問題は「安全でしょうか?」)

4
Javaのさまざまなタイプのスレッドセーフセット
Javaでスレッドセーフなセットを生成するには、さまざまな実装と方法がたくさんあるようです。いくつかの例が含まれます 1)CopyOnWriteArraySet 2)Collections.synchronizedSet(セットセット) 3)ConcurrentSkipListSet 4)Collections.newSetFromMap(new ConcurrentHashMap()) 5)(4)と同様の方法で生成されたその他のセット これらの例は、並行性パターンから来ています:Java 6の並行セット実装 誰かがこれらの例や他の例の違い、利点、欠点を簡単に説明できますか?Java Std Docsのすべてを理解し、まっすぐに保つのに問題があります。
135 java  concurrency  set 


4
どの並列ソートアルゴリズムが平均のケースパフォーマンスが最も良いですか?
シリアルの場合、並べ替えにはO(n log n)かかります。O(n)プロセッサがあれば、線形の高速化が期待できます。O(log n)並列アルゴリズムは存在しますが、非常に高い定数を持っています。また、O(n)プロセッサの近くにないハードウェアには適用されません。pプロセッサでは、妥当なアルゴリズムはO(n / p log n)時間かかるはずです。 シリアルの場合、クイックソートは平均して実行時の複雑さが最も優れています。並列クイックソートアルゴリズムは実装が簡単です(こことここを参照)。ただし、最初のステップはコレクション全体を単一のコアに分割することであるため、パフォーマンスはよくありません。多くの並列ソートアルゴリズムに関する情報を見つけましたが、これまでのところ、明確な勝者を指すものは何もありません。 8から32コアで実行されているJVM言語で、100万から1億の要素のリストをソートしようとしています。

6
Javaではどの並行キュー実装を使用する必要がありますか?
JavaDocsから: A ConcurrentLinkedQueueは、多くのスレッドが共通のコレクションへのアクセスを共有する適切な選択です。このキューはnull要素を許可しません。 ArrayBlockingQueueは、固定サイズの配列がプロデューサーによって挿入され、コンシューマーによって抽出された要素を保持する、古典的な「境界付きバッファー」です。このクラスは、待機中のプロデューサースレッドとコンシューマースレッドを注文するためのオプションの公平性ポリシーをサポートします LinkedBlockingQueueは、通常、アレイベースのキューよりもスループットは高くなりますが、ほとんどの並行アプリケーションでは予測できないパフォーマンスになります。 私には2つのシナリオがあります。1つは、1つのコンシューマーで多くのプロデューサー(それを使用するスレッド)をサポートするキューを必要とし、もう1つはその逆です。 使用する実装がわかりません。誰かが違いを説明できますか? また、「オプションの公平性ポリシー」とはArrayBlockingQueue何ですか?

8
.NET-辞書ロックとConcurrentDictionary
ConcurrentDictionary型について十分な情報が見つからなかったので、ここで質問したいと思いました。 現在、私はaを使用しDictionaryて、複数のスレッド(スレッドプールからなので、正確な量のスレッドはありません)によって絶えずアクセスされるすべてのユーザーを保持し、アクセスを同期しています。 私は最近、.NET 4.0に一連のスレッドセーフなコレクションがあることを発見しました。これは非常に楽しいようです。Dictionary同期アクセスを使用する通常のオプションと、ConcurrentDictionaryすでにスレッドセーフなオプションのどちらかを選択できるため、「より効率的で管理しやすい」オプションは何でしょうか。 .NET 4.0への参照 ConcurrentDictionary

5
マルチスレッドでvolatileを使用するのはいつですか?
グローバル変数にアクセスするスレッドが2つある場合、多くのチュートリアルでは、変数を揮発性にして、コンパイラーが変数をレジスターにキャッシュしないようにし、正しく更新されないようにします。ただし、共有変数にアクセスする2つのスレッドは、ミューテックスを介して保護を要求するものではありませんか。しかし、その場合、スレッドのロックとミューテックスの解放の間に、コードはその1つのスレッドだけが変数にアクセスできるクリティカルセクションにあります。この場合、変数は揮発性である必要はありませんか? したがって、マルチスレッドプログラムでのvolatileの使用/目的は何ですか?

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.