問題タブ [atomic-values]
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.
java - AtomicIntegerArray と AtomicInteger[]
と の意味に違いはありAtomicIntegerArray
ますAtomicInteger[]
か? また、どちらがより高速に使用できますか? (私が気付いたのは、最初に使用するスペースがはるかに少ないということだけですが、これは、各再チェックが配列の境界をチェックしていることを意味するため、遅くなるでしょうか?)
編集:配列が事前に初期化されているシナリオ。
php - フィールドがアトミックのままになるようにテーブルを構造化するにはどうすればよいですか?
在庫を追跡する必要があるショッピング カートがあり、これには属性付きの在庫が含まれます。例えば:
これらのフィールドは現在、データベース内でカンマで区切られており、ID は次のようになります。
ここで、各数字は特定の属性を表します (1 = 青、3 = 小)。問題は、データがデータベース内でアトミックではないため、これを操作するのが非常に難しくなることですが、次のようなアイテムの組み合わせが無限にある可能性があるため、テーブルを構造化する方法を考えることができません。
この情報をデータベースに保存するより良い方法を提案できる人はいますか? ルックアップ テーブルを使用することを考えましたが、属性の数が異なるため、これは機能しません。
performance - 並列バージョンのループはシリアル バージョンよりも高速ではありません
特定のシステムのシミュレーションを実行するプログラムを C++ で作成しています。タイムステップごとに、実行の大部分は 1 つのループで占められています。幸いなことに、これは非常に並列であるため、Boost Threads を使用して並列化することにしました (2 コアのマシンで実行しています)。ロックがないため、シリアル バージョンの 2 倍近くの高速化が期待できます。ただし、スピードアップはまったくないことがわかりました。
ループの並列バージョンを次のように実装しました。
- 2 つのスレッドを起動します (バリアでブロックされています)。
その後、各スレッドは以下を実行します。
- グローバル カウンターをアトミックにフェッチしてインクリメントします。
- そのインデックスでパーティクルを取得します。
- その粒子で計算を実行し、結果を別の配列に格納します
- ジョブ終了バリアで待機
メイン スレッドはジョブ終了バリアで待機します。
このアプローチを使用したのは、適切な負荷分散を提供する必要があるためです (各計算にかかる時間が異なる場合があるため)。この速度低下の原因は何なのか、非常に興味があります。アトミック変数は高速であるといつも読んでいますが、今ではパフォーマンス コストがあるのかどうか疑問に思い始めています。
何を探すべきか、またはヒントがあれば、本当に感謝します。私は 1 週間頭を悩ませてきましたが、プロファイリングではあまり明らかになりませんでした。
編集:問題は解決しました! この問題をどのように解決したかを詳しく説明します。再度 gprof を使用しましたが、今回は最適化フラグ (-O3) なしでコンパイルしました。すぐに、プロファイラーは、個々の粒子の計算を実行する関数に信じられないほどの時間を費やしていることを示しました。これは、シリアル バージョンよりもはるかに長い時間です。
この関数は仮想であり、多態的にアクセスされます。vtable を介してではなく直接アクセスするようにコードを変更したところ、ほら、並列バージョンではほぼ 2 倍のスピードアップが実現しました。シリアル版での同じ変更はほとんど効果がありませんでした。
なぜそうなのかはよくわかりませんが、誰かが知っていれば興味があります!
ポスターの皆様ありがとうございました。皆さんはある程度助けてくれました。1 つの答えを受け入れるのは非常に難しいでしょう。
java - AtomicIntegerは、不揮発性の可変参照のためにメインメモリから値を読み取っていません
以下は、人気のある夫の妻の銀行口座の問題の非スレッドセーフな実装です。
(1つのスレッドが最初にアカウントをチェックし、同じスレッドがwithdrawを実行する前に、別のスレッドがwithdraw操作を実行するため、コードが壊れます)。
Demo.javaファイルの実行後にプログラムのログを見ると。「WifeThread」がメインメモリからAtomicInteger量の値を読み取っていないことは明らかです。
また、単純な「volatileint」を使用して同じ例を試しました。しかし、繰り返しになりますが、私は同じ問題に直面しています:-「Wife-Threadはメインメモリから整数の値を読み取っていません。」
概念を理解するのに役立つように、この動作を説明してください。以下のコードを見つけてください:-
AtomicBankAccount.java
AtomicWithdrawThread.java
Demo.java
よろしくお願いします、
rits
string - R でアトミック ベクトルをグラフ タイトルの文字列として使用する方法
R の z スコアのマトリックスからグラフをプロットしようとしています。列ヘッダーをタイトルの一部として使用し、各グラフを png として保存して、各列を反復処理する関数を作成したいと思います。繰り返しを行い、グラフをpngとして保存する方法を知っていますが、ベクトルを文字列として使用することに行き詰まっています。列ヘッダーのないマトリックスをアップロードしてから、使用する変数「ヘッダー」としてマトリックス[1、]を保存しようとしました。それから私はプロットしようとしました:
私は得る:
「+」なしで試してみると、次のように表示されます。
それで、周りを見回して「paste(headers[i],collapse=" ")」を見つけましたが、これを代用することはできましたが、タイトルとして「28」という数字が付けられています。
私は別の潜在的な解決策だと思ったことを試しました:
そして私は得る:
私はRを初めて使用し、Googleで何時間も検索した後、たまたま適切なガイド/チュートリアルに出くわした場合、これはとても簡単なことのように思えますが、実際にはそのような時間はありません。提案、指針、または解決策は素晴らしいでしょうか??
java - AtomicIntegerArray を使用して Java で AtomicByteArray を実装する
Java のAtomicIntegerArrayをモデルにしたメモリクリティカルなアプリケーションには AtomicByteArray が必要です。私の実装では、4 バイトを整数にラップし、AtomicIntegerArray を使用しています。
get()
実装は自明であり、実装set()
はかなり簡単です。はcompareAndSwap()
よりトリッキーです。私の実装を以下に示します (シングルスレッドで問題なく動作します)。
競合状態を特定しようとしています。get()
考えられるシナリオの 1 つは、との呼び出しの間で値が変更され、元に戻されることですcompareAndSet()
が、これは無害に見えます。
うまくいかない可能性のあるものを見逃していますか?
更新:以下の回答の改善を統合したAtomicByteArrayの基本バージョンを実装しました。
java - AtomicBoolean でインスタンスの状態を制御する
特定の開始コードと停止コードがインスタンスのライフサイクルごとに 1 回だけ実行され、インスタンスが「再起動」されないようにする必要があります。次のコードは、複数のスレッドがインスタンスで動作している可能性があるシナリオに適していますか?