問題タブ [concurrent-collections]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c# - 非同期タスクの多くのインスタンスが同時コレクションへの参照を共有し、C# でアイテムを同時に追加できますか?
私は C# のスレッド化と同時実行コレクションを学び始めたばかりで、質問を投げかける適切な用語がわからないので、私がやろうとしていることを簡単に説明します。現時点では、この件に関する私の把握はせいぜい初歩的なものです。以下の私のアプローチは、私が想像したように実現可能ですか?
テストが必要な Concurrent コレクションに 100,000 個の URL がありますが、リンクは正常ですか? 最初は空の別の同時コレクションがあり、非同期リクエストによって移動されたと判断された URL のサブセット (400、404 などのエラー) が含まれます。
PC と帯域幅が許す限り、これらの非同期リクエストを同時に生成したいと考えており、1 秒あたり 20 個の async-web-request-tasks から始めて、そこから先に進んでいくつもりでした。
1 つの非同期タスクが両方を処理する場合、それは機能しますか? 4xx エラーが発生した場合、非同期要求を作成し、BadUrls コレクションに URL を追加しますか? そのタスクの新しいインスタンスが 50 ミリ秒ごとに生成されます。
実現可能?途中?
c# - Blocking Concurrent Collection - 条件をサポートするアイテムを取る Take メソッド
ブロッキングスレッド セーフ操作をサポートする並行コレクションが必要Take
ですが、実際に取得されるアイテムは条件を満たすアイテムです。
何かのようなもの:
最終的な目標は、現在コレクションに存在するプロパティ値が最も高いアイテムを取得することです。例 - マックス
そのような組み込みのコレクションはありますか?
そうでない場合、より良い代替手段は何ですか?
c# - ConcurrentKeyedCollection アプローチ
ConcurrentKeyedCollection を利用したいのですが、存在しません。
ConcurrentKeyedCollection がないのはなぜですか?
何を使用すればよいですか?(ConcurrentDictionary? KeyedCollection に独自の同時実行保護をラップしますか?)
c# - ConcurrentCollections を使用した PLinq とオブジェクト プーリング
大量のデータ セットを反復処理し、処理された結果をシリアル化のためにコンシューマー スレッドに返す必要があるメソッドがあります。ストリーミング PLinq は、パフォーマンス面で最適です。
これらの操作は頻繁に行われるため、オブジェクトの作成を最小限に抑えるために、オブジェクトプールを使用して処理用のコンテナーをキャッシュしています。私は、concurrentstack を使用して objectpool を実装しようとしました (concurrentbag と concurrentqueue は同じ問題を示します)。まれに、同じアイテム (ハッシュコードを参照) が同じスレッドによってプールから取得されますが、コンシューマー スレッドによって解放されたわけではありません。プールの取得メソッドと解放メソッドにトレースを追加しました。これが出力です。
5:11:32.250 PM スレッド 31 のアイテム 16071020 を取得
5:11:32.254 PM スレッド 31 のアイテム 16071020 を取得
5:11:32.260 PM スレッド 27
のアイテム 16071020 を配置
ここに私が使用しているコードがあります:
Process メソッドでは、プールからオブジェクトを取得します。
Pool クラスの実装:
このような状況が発生するのを防ぐ方法について、私は途方に暮れています。なぜこれが起こるのか、そしてそれを防ぐ方法についてのアイデアはありますか?
.net - System.Collections.Concurrent 欠落クラス
MVC4 プロジェクトに取り組んでいる Visual Studio 2013 の最終リリースを取得しました。.NET 4.5 がターゲット プラットフォームです。System
アセンブリを参照するBlockingCollection<T>
と、表示ConcurentBag<T>
されるのはSystem.Collections.Concurrent
名前空間だけです。ドキュメントによると、そこにあるはずのクラスがさらにたくさんあります。ConcurrentDictionary<TKey, TValue>
特にここを探しています。
アセンブリへのフル パス: C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.5\System.dll
更新: 参照しようとするとmscorlib.dll
、エラーが発生しますA reference to 'mscorlib' could not be added. This component is already automatically referenced by the build system.
c# - 並行コレクションは、異なるスレッドから変更しても安全ですか
私が持っているとしましょう:
にアイテムを安全に追加および削除できるようになりMyCollection
ました。しかし、アイテムの変更についてはどうですか。たとえば、次のことを行うのは安全ですか。
と
例 2:
それは安全ですか?
と
ここで、Thread1 と Thread2 が同時に実行されています。アイテムを変更するときにロックを作成する必要がありますか?