問題タブ [contention]
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.
multithreading - MSXML XSL 変換のマルチスレッド パフォーマンスの競合
MSXML6 を使用して XML メッセージを継続的に解析し、準備された XSLT 変換を適用してテキストを生成するマルチスレッド サーバー C++ プログラムがあります。これを 4 つの CPU を搭載したサーバーで実行しています。各スレッドは完全に独立しており、独自の変換オブジェクトを使用します。スレッド間で COM オブジェクトが共有されることはありません。
これはうまく機能しますが、問題はスケーラビリティです。実行時:
- 1 つのスレッドで、スレッドごとに毎秒約 26 の解析 + 変換を取得します。
- 2 スレッドの場合、約 20/s/スレッドが得られます。
- 3 スレッド、18/s/スレッド。
- 4 スレッド、15/s/スレッド。
スレッド間で共有されるものは何もないので、ほぼ線形のスケーラビリティーを期待していたので、4 スレッドの方が 1 スレッドよりも 4 倍速くなるはずです。代わりに、2.3 倍しか速くなりません。
これは、古典的な競合の問題のように見えます。コード内で競合が発生する可能性を排除するために、テスト プログラムを作成しました。ドキュメントがスレッド間で共有されることはないため、不要なロックを回避するために、FreeThreadedDOMDocument の代わりに DOMDocument60 クラスを使用しています。キャッシュラインの偽共有の証拠を探しましたが、少なくとも私のコードには何もありませんでした。
別の手がかりとして、コンテキスト スイッチ レートは各スレッドで 15k/s を超えています。原因は、COM メモリ マネージャーまたは MSXML 内のメモリ マネージャーであると推測しています。おそらく、メモリの割り当て/割り当て解除ごとに取得および解放する必要があるグローバルロックがあります。この時代に、メモリ マネージャーがマルチスレッドのマルチ CPU シナリオで適切にスケーリングするように記述されていないとは信じられません。
この競合の原因や解消方法を知っている人はいますか?
oracle - インデックス化されていない外部キーが TM エンキューの競合につながる
TM Enq
そのため、競合の原因の 1 つは、インデックスのない FK である可能性があると言われています。私の質問はどれですか。
私INSERT INTO Table_B
は録音している を持っていTM Enq Wait
ます。
PK
他のテーブルの親である が含まれており、FK
他の に制約されている列がありますPK
。
では、FK
インデックスを作成する必要があるのはどれですか?そのテーブルの列またはその子?
注: これが TM 競合の唯一の原因ではないことはわかっています。もしそうなら、なぜこれがあり得ないのか説明できますか?
multithreading - 競合などのスレッドの問題を視覚化するのに最適な図のタイプはどれですか?
システムの問題をデバッグしているときに、ボトルネックの原因となっているスレッドの競合を発見しました。この問題を扱っている他の人々にこの現象を説明する必要があります。それらのいくつかは開発チームからのものではありません(しかし、それらはかなり技術的です)。では、競合、デッドロックなどのスレッドの問題を表すために、どのような種類の図を使用できますか?いくつかの例は非常に役立ちます。
.net - 競合率に関する情報を収集するにはどうすればよいですか?
私が開発しているソフトウェアの負荷は、今後数か月で増加すると予想しています。そのため、いくつかのストレス テストを行い、perfmon を使用してパフォーマンス データを収集しました。より多くの情報が必要なデータの 1 つは、競合率です。
それで私の質問は、あなたの誰かが知っているなら、それについて単なるこの数字よりも多くの情報を得ることができるかどうかです. WinDbg と SOS を使用すると、これをさらに深く掘り下げることができますが、あまり快適ではありません。ボトルネックに指を向ける利用可能なツールがあるかどうか、または全体的なカウンターを作成するだけでなく、クラスまたは特定のロックのカウンターを作成するツールがあるかどうかを知りたいです...
ティア・マーティン
java - javaで同期された競合の証拠を探す場所は?
私たちの Tomcat Web アプリケーションは、数百人のユーザーが使用すると遅く感じます。サーバーはホスティング会社にあり、そのレポートでは帯域幅や CPU のワークロードに問題は示されていません。より簡単なパス。
ThreadLocal ソリューションを使用して同期呼び出しを変更する開発環境でいくつかの人為的なテストを行ったところ、速度が向上しましたが、上司が本番環境でも速度が向上するという証拠を要求することはわかっています。
アプリでスレッドの競合が問題になっているかどうかを確認するにはどうすればよいですか?
java - db競合を確実に再現する
データベーステーブルで規則性の競合が発生しているため、この問題を解決するためのさまざまなオプションを評価したいと思います。
そのためには、テストケースで、再現性のある信頼性を備えたテーブル(任意のテーブル)での競合を再現する必要があります。
私が検討しているアプローチは、ロックのセマンティクス(eg java.util.concurrent.locks.ReentrantLock
)を逆にし、テーブルへの書き込みが開始されたときにロックを解放して、書き込みが開始されたときにすべての読み取りが行われるようにすることです。
したがって、1つのライタースレッドがテーブルへの挿入を実行する直前までロックを保持し、次にロックを解放すると、複数のリーダースレッドが同じテーブルに対してselectステートメントを実行しようとします。
そのようなアプローチについて何か考えがあるのか、それとも100%の信頼性でdbテーブルの競合を再現できるより単純なアプローチがあるのか疑問に思いました。
ありがとう
sqlite - sqlite-同じデータベースにアクセスする2つの別々のスレッド間の潜在的な競合をどのように処理できますか?
質問:同じSqliteデータベースにアクセスする2つの別々のスレッド間の潜在的な競合をどのように処理できますか?
背景:ADO.net経由でSqliteを使用するC#Winformsアプリケーションがあります。私はwinformsアプリケーションにbackgroundworkerスレッドを持っています。メインスレッドとバックグラウンドワーカースレッドの両方がsqliteデータベースを更新しようとすると、つまりDBDataAdaptor.Update()を呼び出すと、例外が発生する可能性があることに気付きました。
だから私は自分のコード(メインスレッドコードやbackgroundworkerで実行されるコード)をチェックして、事前にチェックするか、OKになるまでブロックするか、特定のエラーを発生させることで、これを適切に処理することに興味があります..。。
ありがとう
c# - C# でのスレッドごとのメモリ管理
VS2010 C# 並列プロファイリングの結果を理解するからの議論を続けますが、さらに要点を説明します。
小さなクラスに多くのメモリ割り当てを使用する (Parallel.For/Each を使用して) 並列で動作するスレッドが多数あります。
これにより、グローバル メモリ アロケータ スレッドで競合が発生します。
各スレッドにメモリ プールを事前に割り当て、このプールからすべての割り当てを行うように .NET に指示する方法はありますか?
現在、私の解決策は、メモリプール(スレッド間でリサイクルされるT型のオブジェクトのグローバルに割り当てられた配列)の独自の実装です。これは多くの助けになりますが、次の理由で効率的ではありません。
- 特定のメモリ スライスから割り当てるように .NET に指示することはできません。
- プールにメモリを割り当てるには、まだnewを何度も呼び出す必要があります。
ありがとう、
ハガイ
visual-studio-2010 - Azureキューコードでスレッドの競合が発生する原因は何ですか?
Azureコードに対してVisualStudio2010スレッドプロファイラーを実行したところ、多くの競合が発生していることに気付きました。私のコードは実行中よりも頻繁にブロックされます!
私のワーカーには、カスタムスレッドロジックがまったくありません。これは単純なWhileループであり、さまざまなキューに作業があるかどうかを尋ねます。QueueRepositoryClassのインスタンスを作成してから、GetQueueMessage関数を呼び出します。
何らかの理由で、複数のスレッドがGetQueueMessageメソッドにヒットし、同じqueueClientインスタンスを使用しているようです。おそらくそれは私がCloudStorageAccountオブジェクトを押しつぶした結果ですか?それとも、CreateCloudQueueClient拡張メソッドですか?
php - 2 つ以上のサーバーが同じファイルを同時に書き込もうとすると、NFS ではどうなりますか?
イメージの自動サイズ変更を行う PHP Web アプリケーションに取り組んでおり、イメージが更新されたときにキャッシュを簡単にフラッシュできるように、キャッシュされたコピーを NFS マウントされた NAS に保存することを考えています。
私が唯一心配しているのは、クラスター内の 2 つ以上のサーバーが同時に同じイメージ キャッシュ ファイルを作成しようとした場合、一般的に NFS で何が起こるかということです。
コンテンツの更新のためにキャッシュがフラッシュされると、そのように衝突する可能性がかなりありますが、私は単一のボックスでしか作業していないため、開発中にこのシナリオをテストする優れた方法がありません.
これについて経験のある人はいますか?