問題タブ [copy-on-write]
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++ - 整数へのポインターを使用した書き込み時のコピー
整数へのポインタを使用してコピーオンライトを実装しようとしています。しかし、コードの書き方がわかりません。アイデアは頭の中で非常に明確です。デフォルトのコンストラクターを使用すると、オブジェクトの新しいインスタンスを作成し (インスタンス数 = 1)、コピー コンストラクターを使用すると、インスタンスの数を増やして浅いコピーを作成します。オブジェクトの。
私はC++から始めましたが、ポインターの概念は私にとって完全にニュースなので、これを試しました。しかし、コピーコンストラクターでオブジェクトのコピーを作成しても、「ref」がまだ1に等しい理由が本当にわかりません。
redis - コピーオンライトメモリとは
データを継続的に redis に書き込むと、コピー オン ライトで使用されるメモリが増加し続けます。redis がすべてのバックグラウンド保存を完了できるように、十分長くスリープするようにプログラムを作成しても (最後のメモリ メッセージは、コピー オン ライトで使用されるメモリの 0 MB です)、次のバックグラウンド保存は高い値に戻ります。番号。
例、
牛が使用する1300MBのメモリ
牛が使用する1400MBのメモリ
牛が使用するメモリの0MB
牛が使用する1500MBのメモリ
これらすべては正確には何を意味するのでしょうか? 私の知る限り、コピー オン ライト メモリが増加し続ける場合、十分な RAM があるはずがありません。また、使用されるメモリ量が多いバックグラウンドで保存するたびに、redis が機能していないように見えます。Jedis は常にソケット タイムアウト例外に遭遇します。
arrays - 保持配列のrefcountが増加したときにサブ配列の参照カウントを増やす方法は?
問題なく動作する COWarray がありますが、次のように次元数を拡張したいと考えています。
配列はその項目をブロックに分割します。すべてのサブ配列にはたとえば 100 個の項目があり、平均配列には多くの項目が必要です。
外部には 1 次元配列のみが表示されますが、内部では型のデータはTサブ配列に格納されます。
このようにして、単一のアイテムが変更されたときにコピーをほとんど行わずに書き込みのコピーを作成できます。20,000 個のアイテムすべてを複製する代わりに、100 個のアイテムのみを複製し、200 個のアイテムを含む平均配列を加えます。つまり、300 個のアイテムのみで、労力とストレージがほぼ 99% 削減されます。
問題は、メイン配列の参照カウントの変更を追跡し、それらをサブ配列に伝達する必要があることです。
何かのようなもの:
明らかにパフォーマンス上の理由から、単純な for i ループを使用します
どうすればいいですか?
カスタム TInterfaced オブジェクトを追加することを考えていましたが、それを機能させる方法がわかりません。
c++ - コピーオンライトのスレッドセーフ
スレッドセーフなアプリケーションを開発する適切な方法を理解しようとしています。
現在のプロジェクトでは、次のクラスがあります。
そして私の質問: マルチスレッド環境でメソッド Test::getVal() スレッドセーフの上にありますか、それともコピーを取る前にロックする必要がありますか? COW に関する記事をいくつか読んだことがありますが、今はよくわかりません。
ありがとう!
java - CopyOnWriteArraySet.add および remove の equals のオーバーライド
以下のようなクラスがあります
オブジェクト C がキュー B に存在する場合に追加を許可するが、その逆は許可しないグローバル キューを作成したいと考えています。したがって、#1の前に、セット内の要素をループして、要素をfalseに追加してelement.equals(B)を実行しています。
しかし、1 は true を返す B.equals(C) を呼び出しているため、mySet にはこの行の後に C オブジェクトが 1 つしかありません。
2 は、true を返し、既存のオブジェクト C を削除する B.equals(C) を再度呼び出しています。この場合、C.equals(B) ではないでしょうか? この行は何もしないことを期待しています
これは CopyOnWriteArraySet の間違った使い方ですか?
ご覧いただきありがとうございます