問題タブ [concurrency]
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 - 安全な公開のための単体テスト
Java で安全な公開の保証をどのように単体テストしますか?
具体的には:
メソッド getOrLoad(K key, ObjectLoader loader) を持つ Cache インターフェイスがあります。つまり、キャッシュが指定されたキーのオブジェクトを見つけられない場合、それを ObjectLoader インスタンスからロードする必要があります。ただし、キャッシュは、オブジェクトをローダーからロードしてキャッシュに入れるという行為が安全なパブリケーションを構成することを保証する必要があります。
私は現在、この Cache インターフェースの一般的な junit テストを書いている最中であり、Cache の実装がこの安全な公開の保証に準拠していることをどのようにテストするのだろうかと考えています。
何か案は?実際のコードは、実際のファイルを調べたい場合に備えて、コード リポジトリの test-systest モジュール部分にあります。
c# - C#に挿入するための同時実行を管理する方法は?
多くのオプティミスティック コンカレンシーの例では、データベースのタイムスタンプまたはフラグを使用して更新を参照しています。
ただし、INSERTS のオプティミスティック コンカレンシーを処理したい
ここで説明するのは、偽のシナリオです。
複数のユーザーが同時に仕訳入力を挿入できますが、日付ごとに許可される仕訳入力は 1 つだけです。
複数のユーザーが日誌エントリを作成できるため、同時実行制御がないと、同じ日に複数の日誌エントリが作成される可能性があります。
データベースを使用せずにアプリケーション層でこれが発生しないようにするにはどうすればよいですか (つまり、データベースの一意のキー制約)。
sql-server - SQL Server に推奨するオプティミスティック ロック スキームはどれですか?
.Net 1.1 と SQL Server 2000 を使用してエンタープライズ アプリケーションを構築しています。読み取りコミット分離レベルを使用しています。しかし、非機能要件の変更により、非反復読み取りやファントムに対する対策が必要になりました。2 つのオプションが表示されます。
行のバージョン管理を導入して、行がトランザクション内で読み取られてから変更されたかどうかを確認します。これは、テーブルに VersionId 列を追加し、行が変更されるたびに値をインクリメントすることによって行われます。これで問題は解決しますが、すべてのストアド プロシージャとアプリケーションのデータ アクセス層を書き直す必要があります。
SQL Server 2005 に移行し、スナップショット分離レベルを使用します。これにより、コードを書き直す手間が省けますが、いくつかの課題があります。スナップショット分離レベルは .Net 1.1 では不明であるため、手動で設定するには、サーバーへの余分な往復を行う必要があります。b. スナップショット分離レベルでは tempdb のスキーマを変更できないため、ストアド プロシージャで一時テーブルを使用することはできません。これを回避する方法がわかりません。
アイデアや提案は大歓迎です
database - 分散システム内のレコードロックに関する推奨事項を探しています
レコードのロックに関して、私たちのチームに推奨される設計パターンを考え出そうとしています。典型的な考え方は次のようになります: 1. ユーザーがリストからレコードを選択する 2. ユーザー ID でレコードをロックする 3. ロックされたレコード レコードをロードする (ロックなしで、誰かがあなたを打ち負かす)。
何か不足していますか、それともこれが唯一の方法のように見えますか? ((私たちの場合、オプティミスティック ロックは、エンド ユーザーにとって面倒で混乱を招きます。多くの場合、編集は非常に重要です。))
java - 同時にアクセスされるリストにJava6で使用するための最良のアプローチ
複数のスレッドからアクセスされているListオブジェクトがあります。ほとんどの場合、リストを更新するスレッドが1つあり、状況によっては2つのスレッドがあります。処理されているユーザー要求の数に応じて、このリストから読み取ることができるスレッドは1つから5つあります。このリストは、実行するタスクのキューではなく、同時に取得および更新されるドメインオブジェクトのリストです。
このリストへのアクセスをスレッドセーフにする方法はいくつかあります
。-同期ブロックを使用する
-通常のロックを使用する(つまり、読み取り操作と書き込み操作が同じロックを共有する)-ReadWriteLock
を
使用する-新しいConcurrentBLABLBAコレクションクラスの1つを使用する
私の質問:
重要なセクションには通常多くの操作(ほとんどの場合、リストから要素を追加/削除/挿入または取得するだけ)が含まれていないことを考えると、使用するのに最適なアプローチは何ですか?
上記にリストされていない別のアプローチをお勧めできますか?
いくつかの制約
-最適なパフォーマンスが重要であり、メモリ使用量はそれほど多くありません-ソートされたリストではありませんが(つまり、ComparableまたはComparatorを使用してソートされていないが、挿入順序に従って) 、
順序付けられたリスト(現在はArrayList
で同期されている)である必要がありますリストは大きく、最大100000のドメインオブジェクトが含まれるため、CopyOnWriteArrayListのようなものを使用することはできません
-書き込み/更新の循環セクションは通常非常に高速で、単純な追加/削除/挿入または置換(設定)
を実行します-読み取り操作は主に実行されますelementAt(index)はほとんどの場合呼び出しますが、一部の読み取り操作はバイナリ検索またはindexOf(element)を実行する場合があります。
-indexOf(..)のような操作はリストをトラバースしますが、リストに対する直接の反復は行われません。
java - ロックの取得時に AbstractQueuedSynchronizer が中断するのはなぜですか
java.uti.concurrent.locks.AbstractQueuedSynchronizer のソースコードを見ていましたが、acquire() メソッドは次のようになります -
acquire() を呼び出すスレッドを中断するのはなぜですか? スレッドの run() メソッドのどこかにチェックがあった場合、acquire() を呼び出した後に合格する可能性がありますが、これはおそらく望ましくなく、考えられていませんか?
上記のコードがこれを行う理由を明らかにしたい人はいますか?
python - Python のキーボード割り込み可能ブロッキング キュー
そうみたいです
キーボード割り込み可能(ctrl-c)ですが、
ではありません。いつでもループを作成できます。
しかし、これは奇妙なことのようです。
それで、無期限に待機しているがキーボード割り込み可能な Queue.get() を取得する方法はありますか?
concurrency - すでに作成された並行プログラムをGPUアレイで実行するにはどうすればよいですか?
私はErlangで書かれたニューラルネットワークを持っていて、240コアのGPUを搭載したGeForceGTX260カードを購入しました。グラフィックカードでこれを実行するための接着剤としてCUDAを使用するのは簡単ですか?
java - プロセッサあたりのスレッド数
Java で、CPU がサポートする同時スレッド数をプログラムで調べる方法はありますか?
アップデート
明確にするために、私はスレッドで CPU を叩こうとしているのではなく、探している情報の一部を提供する Runtime.getRuntime().availableProcessors() 関数を認識しています。
次のように、スレッド プールのサイズを自動的に調整する方法があるかどうかを確認したいと思います。
- 1 年前のサーバーで実行している場合、2 つのスレッド (CPU あたり 1 スレッド x 任意の乗数 2) を取得します。
- 2 年後に Intel i7 クアッド コア (コアあたり 2 スレッドをサポート) に切り替えると、16 スレッド (CPU あたり 2 論理スレッド x 4 CPU x 任意の乗数 2) になります。
- 代わりに、8 コアの Ultrasparc T2 サーバー (コアあたり 8 スレッドをサポート) を使用すると、128 スレッド (CPU あたり 8 スレッド x 8 CPU x 任意の乗数 2) が得られます。
- 異なる年に購入された可能性のある 30 台の異なるマシンのクラスターに同じソフトウェアを展開する場合、CPU の仕様を読んで、それらのすべての構成オプションを設定する必要はありません。
php - PHP での NFS ファイルのロック
私の最新の webapp の一部は、ログの一部としてかなりの量をファイルに書き込む必要があります。私が気づいた 1 つの問題は、少数の同時ユーザーがいる場合、(ファイルに追加する代わりに) 書き込みが互いに上書きされる可能性があることです。これは、宛先ファイルを同時に複数の場所で開くことができるためだと思います。
flock(...)
通常は優れていますが、NFSでは動作しないようです...運用サーバーがNFSアレイを使用しているため、これは私にとって大きな問題です。
私が見た中で実際の解決策に最も近いのは、ロックディレクトリを作成しようとし、それが作成されるまで待つことです。これがエレガンスに欠けていると言うのは、今年、おそらく10年の控えめな表現です.
より良いアイデアはありますか?
編集:サーバーにルートがなく、別の方法でストレージを実行することは、少なくとも私の期限内ではすぐには現実的ではないことを追加する必要があります.