ホームページ >ウェブフロントエンド >jsチュートリアル >プロセス作成とファイルコピーのための Node.js+COW テクノロジーに関する簡単な説明
この記事では、COW (Copy-On-Write) テクノロジを理解し、COW テクノロジのプロセス作成とファイル コピーのアプリケーション Node.js を紹介します。
COW は牛ではなく、Copy-On-Write の略で、コピーはするが完全にはコピーしない技術です。
一般的に、コピーとは 2 つの同一のコピーを作成することです。2 つのコピーは独立しています:
ただし、場合によっては、コピーが機能しないことがあります。 , 以前のものを再利用することができますが、このとき、内容を書く際には、以前のものを引用し、内容の該当部分をコピーするだけで大丈夫です。このように、コンテンツが読み取りに使用される場合にはコピーは不要ですが、書き込みが必要な場合には、実際にはコンテンツの一部がコピーされて変更されます。
これは「コピーオンライト」と呼ばれ、コピーオンライトとも呼ばれます。
原理は非常に単純ですが、オペレーティング システムのメモリ管理とファイル システムでは非常に一般的であり、Node.js もこのテクノロジのせいで「遅延」になっています。
この記事では、Node.js でのプロセス作成とファイルのコピーにおけるコピーオンライトの応用について見ていきます。 [推奨学習: "nodejs チュートリアル"]
ファイル コピーの最も一般的なアイデアは、完全に同一のコピー ファイルを作成することです。
コピーすると、前のコンテンツへの参照が追加されるだけです。変更されなければ、実際にはコピーされません。コピーのみ コンテンツが初めて変更されるまで、対応するデータ ブロックは実際にはコピーされないため、大量のハードディスク領域の無駄が回避されます。
const fsPromises = require('fs').promises; (async function() { try { await fsPromises.copyFile('source.txt', 'destination.txt'); } catch(e) { console.log(e.message); } })();ただし、3番目のパラメータを使用してコピー戦略を指定できます:
const fs = require('fs'); const fsPromises = fs.promises; const { COPYFILE_EXCL, COPYFILE_FICLONE, COPYFILE_FICLONE_FORCE} = fs.constants; (async function() { try { await fsPromises.copyFile('source.txt', 'destination.txt', COPYFILE_FICLONE); } catch(e) { console.log(e.message); } })();サポートされているフラグは3つあります:
COPYFILE_EXCL: ターゲット ファイルの場合すでに存在する場合、エラーが報告されます (デフォルトは上書きです)
const flags = COPYFILE_FICLONE | COPYFILE_EXCL; fsPromises.copyFile('source.txt', 'destination.txt', flags);Node.js オペレーティング システムのコピーオンライト テクノロジをサポートしており、一部のシナリオでパフォーマンスを向上させることができます。 COPYFILE_FICLONE メソッドを使用することをお勧めします。これはデフォルトのメソッドよりも優れています。
プロセスの作成
コード セグメント: 実行されるコードを格納します
これが、プロセスの作成がフォークと呼ばれる理由です。これは、完全に独立しているわけではなく、特定の部分が 2 つの部分に分岐しているためです。しかし、そのほとんどはまだ同じです。
しかし、実行されるコードが異なる場合はどうなるでしょうか? この時点では、新しいコード セグメント、データ セグメント、スタック セグメントを作成し、新しいコードを実行する exec を使用する必要があります。 fork および exec API は Node.js でも使用できます。 fork:const cluster = require('cluster'); if (cluster.isMaster) { console.log('I am master'); cluster.fork(); cluster.fork(); } else if (cluster.isWorker) { console.log(`I am worker #${cluster.worker.id}`); }exec:
const { exec } = require('child_process'); exec('my.bat', (err, stdout, stderr) => { if (err) { console.error(err); return; } console.log(stdout); });fork は Linux の基礎ですプロセスの作成 、これはコピーオンライトテクノロジがいかに重要であるかを示しています。
同じコンテンツの複数のコピーをコピーすることは間違いなくスペースの無駄であるため、オペレーティング システムは、プロセス作成時にファイルをコピーしたりメモリをコピーしたりするときにコピーオンを使用します。テクノロジーは、実際に変更された場合にのみコピーされます。
Node.js は、fs.copyFile のフラグの設定をサポートしています。COPYFILE_FICLONE を指定すると、コピーオンライトを使用してファイルをコピーできます。また、ハード ディスクのスペースを節約し、パフォーマンスを向上させるために、この方法を使用することをお勧めします。ファイルコピーのパフォーマンス。
プロセスのフォークもコピーオンライトの実装です。プロセスのコード セグメント、データ セグメント、スタック セグメントを新しいコンテンツに直接コピーするのではなく、以前のコンテンツを参照します。実メモリのコピーを実行します。
さらに、コピーオンライトは、Immutable の実装や分散読み取り/書き込み分離などの分野で多くの用途があります。
COW は Node.js を「遅延」させますが、パフォーマンスは向上します。
元のアドレス: https://juejin.cn/post/6999497362255118366
作者: zxg_God は光があるに違いないと言いました
その他のプログラミング関連知識については、プログラミング入門をご覧ください。 !
以上がプロセス作成とファイルコピーのための Node.js+COW テクノロジーに関する簡単な説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。