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

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

php - コピー オン ライトはアレイ上でのデータの重複を防ぎますか?

CSV データを連想配列に解析する Web API クライアントを PHP でプログラミングしています。これらの配列を使用するときにユーザーをデータの重複から保護したいと考えています。

ユーザーがこれらの配列に書き込むことはありません (理論的には可能ですが、実際には意味がありません)。

ここで私の質問は...ユーザーがこれらの配列を引数としてメソッドに渡す場合、PHPのコピーオンライトメカニズムはデータの重複を防ぐか、配列への参照を明示的に受け入れないメソッドは完全なコピーを受け取りますか?配列の?

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

c - mmap() のコピーオンライトとオンデマンドでゼロ埋めを無効にする方法

mmap() を使用して cp(ファイル コピー) コマンドを実装しています。そのために、ソースファイルをMAP_PRIVATE(読みたいだけ)モードでマップし、宛先ファイルをMAP_SHAREDモードでマップしました(宛先ファイルの変更されたコンテンツを書き戻す必要があるため)。

これを行っている間、2 つの理由で発生する多くのマイナー ページ フォールトによるパフォーマンスの低下を観察しました。1) ソース ファイルの mmap(MAP_PRIVATE) を呼び出している間、オンデマンドでゼロ フィルが行われます。2) 宛先ファイルの mmap(MAP_SHARED) を呼び出しながら書き込み時にコピーします。

Zero-fill-on-demand と Copy-on-write を無効にする方法はありますか?

ありがとう、ハリッシュ

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

c++ - イテレータと参照カウント文字列

参照カウントを使用する std::string 実装を検討する場合は、次のシナリオを検討してください。

L1 と L2 で何が起こるか? 参照カウントが壊れていて、ディープ コピーが実行されていますか? 私はそう思いますが、私の懸念は、それが発生した場合、簡単なことをすることです:

または単純な:

const 以外のコンテキストでは、不要なディープ コピーが実行されます。私は正しいですか?実装はこの詳細をどのように処理しますか?

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

qt - QImageコピーオンライト

QImage基づいていQSharedDataますか?Qimageフォローするpimplか?copy on writeたとえば、Qimageを(コピーコンまたは割り当てを介して)コピーすると、ピクセルのディープコピーが作成されますか?

0 投票する
0 に答える
682 参照

linux - Linuxカーネル内でCOWコピーを実行していますか?

だから、私は疑問に思っていました-データをすぐに転送する代わりに、カーネル内にメモリページ( )のコピーを実装し、コピーオンライトメカニズムを利用するにはどうすればよいですか?struct page

現在、ユーザーランドのアドレスをページに変換allocate_pagesし、カーネルから使用して必要な量のページを割り当て、を使用してコピーしcopy_pages、最後にを使用して目的の領域にマッピングすることで、ページをコピーしていinstall_special_mappingます。これは機能しますが、コピーオンライトメカニズムを使用して最適化できると思います。

0 投票する
5 に答える
3786 参照

java - Javaでは、コピーオンライトを実装するために参照割り当てがアトミックであることに依存できますか?

マルチスレッド環境に非同期のJavaコレクションがあり、コレクションのリーダーを強制的に同期させたくない場合[1]、ライターを同期して参照割り当てのアトミック性を使用するソリューションは実行可能ですか?何かのようなもの:

このような状況では、独自のソリューションをロールすることは失敗することが多いようです。そのため、データコンシューマーのオブジェクトの作成とブロックを防ぐために使用できる他のパターン、コレクション、またはライブラリについて知りたいと思います。


[1]デッドロックが発生するリスクと相まって、書き込みに比べて読み取りに費やされる時間の割合が高い理由。


編集:いくつかの回答とコメントの多くの良い情報、いくつかの重要なポイント:

  1. 投稿したコードにバグがありました。グローバル(不適切な名前の変数)で同期すると、スワップ後に同期されたブロックを保護できない場合があります。
  2. クラスで同期する(synchronizedキーワードをメソッドに移動する)ことでこれを修正できますが、他のバグがある可能性があります。より安全で保守しやすい解決策は、java.util.concurrentの何かを使用することです。
  3. 私が投稿したコードには「結果整合性の保証」はありません。リーダーがライターによる更新を確認できるようにする1つの方法は、volatileキーワードを使用することです。
  4. 振り返ってみると、この質問の動機となった一般的な問題は、Javaでロックされた書き込みを使用してロックのない読み取りを実装しようとしたことでしたが、私の(解決された)問題はコレクションにあり、将来の読者を不必要に混乱させる可能性があります。したがって、私が投稿したコードが機能することが明らかでない場合は、一度に1人のライターが、複数のリーダースレッドによって保護されずに読み取られている「オブジェクト」の編集を実行できるようにします。編集のコミットはアトミック操作によって行われるため、読者は編集前または編集後の「オブジェクト」のみを取得できます。リーダースレッドが更新を取得した場合、「オブジェクト」の古いコピーで読み取りが行われているため、読み取りの途中で更新を行うことはできません。Javaでより優れた並行性サポートが利用可能になる前に、おそらく発見され、何らかの方法で壊れていることが証明された単純なソリューション。
0 投票する
7 に答える
31866 参照

c++ - C++11 での COW std::string 実装の合法性

コピー オン ライトはstd::string、C++11 で準拠を実装する実行可能な方法ではないことを理解していましたが、最近議論になったとき、そのステートメントを直接サポートできないことに気付きました。

C++11 が の COW ベースの実装を認めないというのは正しいstd::stringですか?

もしそうなら、この制限は新しい標準のどこかに明示的に記載されていますか?

または、この制限はstd::string、COW ベースのstd::string. std::stringこの場合、「C++11 は COW ベースの実装を効果的に禁止する」という章と節のスタイルの派生に興味があります。

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

java - 書き込み時にJava文字列コピーに依存する

私のアプリケーションは、クラス A などのクラスのインスタンスを多数作成します。すべてのインスタンスには文字列が含まれており、それらのほとんどには同じ文字列が含まれています。

JVMは「すべての等しい文字列」を、一度だけ格納された同じ文字列を指すようにすることを知っています。私の A インスタンスの 1 つの myString フィールドが上書きされた場合、元の文字列への参照が新しい文字列値への参照に置き換えられ、すべてが期待どおりに機能します。

この動作は準拠している JVM に必要ですか、それとも jvm から別のバージョンへ、またはバージョンからバージョンへと変更される可能性のある jvm の一種の改善ですか?
別の言い方をすれば、非常に冗長な (文字列ベースの) データ構造を設計する場合、コピー オン ライト メカニズムだけに頼るべきか、それともアプリケーション レベルで何かを配置することをお勧めしますか?

0 投票する
5 に答える
1323 参照

performance - perl のハッシュ要素のエイリアス

異なるハッシュ キーで同じ値にアクセスすることは可能ですか? 「非常に長いテキスト」をコピーしないように Perl に指示するにはどうすればよいですか?

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

php - PHP の extract() 関数は、コピー オン ライトを使用してシンボル テーブルに変数を追加しますか?

申し訳ありませんが、この回答はインターネット上のどこかにあると確信していますが(おそらくスタックオーバーフローでさえ)、過去1時間検索に費やしたので、回答が見つからないようです...

PHP の extract() 関数は、コピー オン ライトを使用してシンボル テーブルに変数を追加しますか?

PHP 関数呼び出しはすべてデフォルトでコピー オン ライトであることを知っています (参照によって指定しない限り)。テンプレートファイルを含める前にそれらを抽出することが最善の方法であるかどうか疑問に思っています.

ありがとう!

編集:

明確にするために: