問題タブ [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.

0 投票する
4 に答える
531 参照

java - string.intern()の競合を回避し、メモリフットプリントを低く抑えるにはどうすればよいですか?

かなり大きな(200 MB)XMLファイルを解析しているところ、それぞれが一連のパラメーター(key = value)を定義するオブジェクトのツリーになります。このデータ構造はTomcatWebアプリケーションで実行されており、これらのパラメーターを検索するために使用されます。

数か月前、このサーバーでヒープメモリの問題を発見しました。パラメータのキーと値(ほとんどは非常に冗長です)をインターンすることで解決でき、メモリフットプリントが150MB以上からわずか20MBに削減されました。

人々が起動時間について不平を言っているので、今日私はサーバーを再訪しています。サーバーのプロファイリングを行っていますが、XPP3を使用したXMLの解析には40秒かかりますが、String.intern()には30秒以上かかります。

これはトレードオフであることを私は知っています。そして、私は自分でインターンをすることができることを知っています。XMLの解析はシングルスレッドであるため、単純なHashMapでも同様に機能する可能性があります。しかし、あなたが知っている、これはちょっと奇妙に感じます。

別の解決策を支持してString.internを削除する価値があるかどうかを確認するために、誰かが数値を計算しましたか?

だから問題は?このような問題について、どうすれば競合をできるだけ少なくすることができますか?

ありがとう、ステファン

0 投票する
3 に答える
1325 参照

.net - マルチスレッドのリソース競合

さまざまな数の許可されたスレッドで実行されているマルチスレッド プログラムをプロファイリングしています。以下は、同じ入力作業を 3 回実行したときのパフォーマンス結果です。

同じ作業を行うのにより多くのスレッド時間がかかるため、スレッドがリソースをめぐって競合しているに違いないと感じています。

アプリ マシンとデータベース サーバーの両方で、4 つの柱 (CPU、メモリ、diskIO、ネットワーク) を既に調べました。メモリは元の競合リソースでしたが、現在は修正されています (常に 1G 以上の空き容量があります)。CPU は、20 スレッドのテストで 30% から 70% の間で推移しているので、十分です。diskIO は、アプリ マシンでは実質的にゼロであり、データベース サーバーでは最小限です。ネットワークは本当に素晴らしいです。

また、redgate を使用してコード プロファイリングを行いましたが、ロックを待機しているメソッドはありません。スレッドがインスタンスを共有していないことが役立ちます。現在、データベース接続の確立/プーリングなど、より微妙な項目をチェックしています (20 個のスレッドが同じデータベースに接続しようとした場合、それらは互いに待機する必要がありますか?)。

20 スレッドの実行が次のようになるように、リソースの競合を特定して対処しようとしています。

その競合を見つけるために調べる必要がある最も可能性の高い情報源 (ビッグ 4 以外) は何ですか?


各スレッドが実行するコードは、おおよそ次のとおりです。

WCF サービスは同じマシン上で実行されており、ステートレスであり、複数の同時要求を処理できます。


マシンには 8 つの CPU があります。

0 投票する
3 に答える
87 参照

java - Java-Struts Webアプリケーションでリファクタリングされたメソッドは競合を引き起こしますか?

私は、Javaで支柱を使用してWebアプリケーションを作成する会社で働いています。私は最近、システムを整理するために多くのコードをリファクタリングしています。私が使用している手法の1つは、メソッドのストリームの終了ステートメントを、finallyブロックでユーティリティクラスに移動することです。ユーティリティクラスは静的であり、さまざまなタイプのストリームのクローズメソッドがあります。このリファクタリングを行うことで、ストリームを閉じる必要があるたびに5行のコードを節約できます。これにより、一部のクラスのコードが600行削減され、非常に有利になりました。ただし、これを行うことで、本番環境に移行した場合にこれらのメソッドで競合が発生する可能性があるのではないかと心配しています。

私はマルチスレッドプログラミングで競合の概念に出くわしただけです。そのため、これがこれらのインスタンスで問題を引き起こすかどうかはわかりません。

これは可能ですか?または単に競合、静的メソッド、Webアプリケーションなどの私の誤解?

よろしくお願いします、アレクセイブルー。

0 投票する
4 に答える
4240 参照

c++ - プログラムを4つのスレッドに分割すると、1つのスレッドよりも遅くなります

私は先週レイトレーサーを書いていましたが、マルチスレッドが理にかなっているほど十分に機能しているところまで来ました。OpenMPを使用して並列化しようとしましたが、より多くのスレッドで実行すると、実際には1つで実行するよりも遅くなります。

特にOpenMPに関する他の同様の質問を読んで、1つの提案は、gccがシリアルコードをより適切に最適化することでした。ただし、以下のコンパイル済みコードの実行は、の場合のexport OMP_NUM_THREADS=12倍の速度export OMP_NUM_THREADS=4です。つまり、両方の実行で同じコンパイル済みコードです。

プログラムの実行time

ユーザー時間は実際よりもはるかに短くなります。これは、複数のコアを使用する場合は珍しいことです。複数のコアが同時に実行されているため、ユーザーは実際よりも長くする必要があります。

OpenMPを使用して並列化したコード

この質問を読んだとき、私は自分の答えを見つけたと思いました。スレッド間で乱数を生成するための状態を保持するために、それ自体への呼び出しを同期するgclib rand()の実装について説明します。モンテカルロサンプリングにrand()を多用しているので、それが問題だと思いました。randへの呼び出しを取り除き、それらを単一の値に置き換えましたが、複数のスレッドを使用するとまだ時間がかかります。編集:おっと、私はこれを正しくテストしなかったことがわかりました、それはランダムな値でした!

これらが邪魔にならないので、への各呼び出しで行われていることの概要について説明しますcomputePixel。解決策が見つかることを願っています。

私のレイトレーサーには、基本的にすべてのオブジェクトを含むシーンツリーがあります。このツリーは、オブジェクトの交差がテストされるときに頻繁にトラバースcomputePixelされますが、このツリーまたはオブジェクトへの書き込みは行われません。computePixel基本的に、シーンを何度も読み取り、オブジェクトのメソッド(すべてconstメソッド)を呼び出し、最後に単一の値を独自のピクセル配列に書き込みます。これは、複数のスレッドが同じメンバー変数に書き込もうとする場所を私が知っている唯一の部分です。2つのスレッドがピクセル配列の同じセルに書き込むことができないため、どこにも同期はありません。

誰かが何らかの論争があるかもしれない場所を提案できますか?試してみませんか?

前もって感謝します。

編集: 申し訳ありませんが、私のシステムに関する詳細情報を提供しないのは愚かでした。

  • コンパイラgcc4.6(-O2最適化あり)
  • Ubuntu Linux 11.10
  • OpenMP 3
  • Intel i3-2310Mクアッドコア2.1Ghz(現時点では私のラップトップ上)

計算ピクセルのコード:

提案から、速度低下を引き起こすのはツリートラバーサルである可能性があります。他のいくつかの側面:サンプリング関数が呼び出されると、かなり多くの再帰が発生します(光線の再帰的なバウンス)-これはこれらの問題を引き起こす可能性がありますか?

0 投票する
1 に答える
1139 参照

c++ - ロック競合を最小限に抑える c++ std::map

私は持っていstd::map<int, Object*> ObjectMapます。ここで、マップを更新する必要があり、複数のスレッドを介して更新を行うことができます。そのため、更新のためにマップをロックします。しかし、更新のたびに計算に時間がかかるため、ロックの競合が発生します。

次のシナリオを考えてみましょう。

すべての Customer も更新され、いくつかの計算が含まれます。これは簡単な Observer パターンです。しかし、多数のオブザーバーと各オブザーバーでの膨大な計算は、この設計のキラーです。コードでロックの競合が発生します。これは実際的な問題だと思いますが、人々はよりスマートな方法を使用しており、私はそれらのよりスマートな方法を探しています。今回は少し分かりやすいと思います

ありがとうシブ

0 投票する
1 に答える
942 参照

c# - 1 つのロックの競合率を測定する方法

現在、保守している部分的なアプリケーション (.net 4.0、c#) の競合率に問題があります。私がやりたいことは、1 つの部分的なロックを取得できなかった場合に PerfCounter を作成することです。現在、.net によって提供される全体的なカウンターしかありませんが、選択したロックの一部に対して PerfCounter を使用したいと考えています。

プロファイラーなどは私にはオプションではありません。これは私が触れることができない高性能の生産的な環境であるため、perfcounter を記録できます。

0 投票する
4 に答える
602 参照

google-app-engine - AppEngine での競合の回避

競合と、それがアプリケーション エンジン スタックにどのように適用されるかについて頭を悩ませようとしています。

私はそのように構築されたモデルを持っています

このモデルはいくつかのイベントを保持します。各イベントには所有者とペイロードがあり、イベントの所有者は自分のイベントとの間でペイロードを書き込み、他の多くのイベントはイベントから読み取ります。これは一種のトランスクリプション スタックです。

私の質問は競合についてです。これによって影響を受けるのでしょうか。もしそうなら、どうすればそれを防ぐために再構築できますか。

ありがとうございました。

0 投票する
1 に答える
377 参照

c++ - プロセス間でポートの使用を調整するにはどうすればよいですか?

各プロセスが異なるポートを選択してソケットを作成し、別のマシンと通信するように、マシン上でいくつかのプロセスを相互に調整する必要があります。各プロセスは、任意の時点で 1 つのプロセスだけが特定のポート番号を使用するように、使用可能なポートの範囲からポート番号を選択する必要があります。

この調整を行うための既存のメカニズムはありますか、それとも独自に構築する必要がありますか?

現在、ディスク上のファイルを使用して、ポート番号とそのポートを使用している PID を登録しています。PID が実行されていないエントリが見つかった場合、プロセスが正常に終了していないと見なされ、そのエントリをリープする必要があるため、そのエントリは削除されます。

ただし、まれに、ある種の競合状態があるようです。同じポートを使用する 2 つのプロセスが発生し、2 番目のプロセスはポートが予約されていることを示すファイルの内容を認識せず、2 回目に使用することになります。

これを修正するよりも、このポートの衝突を回避するための既存のメカニズムを採用したいので、そのようなユーティリティが既に存在するかどうかを尋ねています。

0 投票する
2 に答える
2607 参照

c++ - ミューテックス競合の測定/ミュートレース出力の解釈

プログラムでmutraceを使用してミューテックスの競合を測定しようとしていますが、出力されるレポートの使用方法については行き詰まっています。

私は間違いなくミューテックスの競合の問題を抱えているようですが、これをソースコードに関連付ける方法がわかりません。私はこれよりも良いバックトレースを望んでいました。

実行可能ファイルは、mutraceのWebサイト(および-g -gdbも)に従って-rdynamicでコンパイルされています。

私はここでstackoverflowでmutraceを発見したので、経験のある人がいることを願っています!

ありがとう。

0 投票する
1 に答える
670 参照

simulation - 次の信号との Verilog 競合

次のコードを実装しようとしています。

これはシミュレーションでは正常に機能しますが、合成では next_busy 信号に対してある種の競合があるようです。つまり、busy が 1 でない場合 (たとえば、前のサイクルでリセットがあった場合)、x が出力されます (入力条件が満たされた場合)。ただし、busy が既に 1 であった場合 (および入力条件が満たされている場合)、next_busy には正しく 1 が割り当てられます。だから、合成でも機能するように、私がやろうとしていることを行う適切な方法があるのではないかと思っていますか?