목차
파일 복사
fork는 프로세스를 생성하는 일반적인 방법이며 그 구현은 Copy-On-Write 기술입니다.
요약
웹 프론트엔드 JS 튜토리얼 프로세스 생성 및 파일 복사를 위한 Node.js+COW 기술에 대한 간략한 토론

프로세스 생성 및 파일 복사를 위한 Node.js+COW 기술에 대한 간략한 토론

Sep 17, 2021 am 10:07 AM
node.js 파일 복사

이 기사에서는 COW(Copy-On-Write) 기술에 대해 알아보고 COW 기술 + Node.js의 프로세스 생성 및 파일 복사 응용 프로그램을 소개합니다.

프로세스 생성 및 파일 복사를 위한 Node.js+COW 기술에 대한 간략한 토론

COW는 소가 아니라 Copy-On-Write의 약어로, 복사는 하되 정확하게 복사하지는 않는 기술입니다.

일반적으로 복사는 두 개의 동일한 복사본을 만드는 것입니다. 두 복사본은 독립적입니다.

프로세스 생성 및 파일 복사를 위한 Node.js+COW 기술에 대한 간략한 토론

그러나 때로는 복사가 필요하지 않으며 이전 복사본을 완전히 재사용할 수 있습니다. 1. 내용 작성 시 내용의 해당 부분을 복사해 주세요. 이런 식으로 내용을 읽는 데 사용하면 복사가 제거되지만 쓰기가 필요한 경우 실제로 내용의 일부가 수정을 위해 복사됩니다.

프로세스 생성 및 파일 복사를 위한 Node.js+COW 기술에 대한 간략한 토론

이를 "기록 중 복사"라고 하며 기록 중 복사라고도 합니다.

원리는 매우 간단하지만 운영 체제의 메모리 관리 및 파일 시스템에서 매우 일반적입니다. Node.js도 이 기술로 인해 "게으른" 상태가 되었습니다.

이 기사에서는 Node.js의 프로세스 생성 및 파일 복사에서 Copy-On-Write 적용을 살펴보겠습니다. [추천 학습: "nodejs tutorial"]

파일 복사

파일 복사에 대한 가장 일반적인 아이디어는 동일한 파일 내용을 다른 위치에 완전히 쓰는 것이지만 여기에는 두 가지 문제가 있습니다.

  • Write 같은 파일을 수백번 복사하면 같은 내용이 수백번 생성되나요? 하드디스크 공간 낭비
  • 글을 쓰다가 전원이 나가면 어쩌지? 덮어쓴 콘텐츠를 복원하는 방법은 무엇입니까?

어떻게 해야 하나요? 이때 운영체제 설계자들은 COW 기술을 떠올렸다.

COW 기술을 사용하여 파일 복사를 구현하면 위의 두 가지 문제가 완벽하게 해결됩니다.

  • 복사하면 이전 내용에 대한 참조만 추가될 뿐이며 수정되지 않으면 실제로 복사되지 않습니다. 해당 데이터 블록이 실제로 복사되므로 많은 양의 하드 디스크 공간이 낭비되지 않습니다.
  • 파일 쓰기 시에는 다른 빈 디스크 블록에 먼저 수정을 하고, 수정이 완료된 후 대상 위치에 복사되므로 정전 후 롤백이 불가능한 문제가 없습니다

Node.js의 fs.copyFile API에서는 Copy-On-Write 모드를 사용할 수 있습니다.

기본적으로 copyFile은 대상 파일에 쓰고 원본 콘텐츠를 덮어씁니다.

const fsPromises = require('fs').promises;

(async function() {
  try {
    await fsPromises.copyFile('source.txt', 'destination.txt');
  } catch(e) {
    console.log(e.message);
  }
})();
로그인 후 복사

그러나 세 번째를 통해 복사 전략을 지정할 수 있습니다. 매개변수:

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: 대상 파일이 이미 존재하는 경우 오류가 보고됩니다(기본값은 덮어쓰기입니다).
  • COPYFILE_FICLONE: 복사 중 쓰기 모드로 복사합니다. 시스템이 이를 지원하지 않으면 실제 복사로 전환됩니다(기본값은 직접 복사)
  • COPYFILE_FICLONE_FORCE: 쓰기 중 복사 모드에서 복사합니다. 운영 체제가 이를 지원하지 않으면 오류가 보고됩니다.
  • 이 세 가지 상수는 1, 2, 4입니다. 비트별 OR로 결합하여 전달할 수 있습니다.
const flags = COPYFILE_FICLONE | COPYFILE_EXCL;
fsPromises.copyFile('source.txt', 'destination.txt', flags);
로그인 후 복사

Node.js는 운영 체제의 쓰기 중 복사 기술을 지원하므로 일부 시나리오에서 성능을 향상시킬 수 있습니다. 기본 방법보다 더 나은 COPYFILE_FICLONE 방법을 사용하는 것이 좋습니다.

프로세스 생성

fork는 프로세스를 생성하는 일반적인 방법이며 그 구현은 Copy-On-Write 기술입니다.

우리는 프로세스가 메모리에서 코드 세그먼트, 데이터 세그먼트, 스택 세그먼트의 세 부분으로 나누어져 있다는 것을 알고 있습니다.

코드 세그먼트: 실행될 코드를 저장합니다.
  • 데이터 세그먼트: 일부 전역 데이터를 저장합니다.
  • 스택 세그먼트: 상점 실행 상태
  • 이 프로세스를 기반으로 새로운 프로세스가 생성되면 이 3가지 메모리 부분을 복사해야 합니다. 그리고 메모리의 세 부분이 동일한 내용을 가지면 메모리 공간이 낭비됩니다.

그래서 포크는 실제로 메모리를 복사하는 것이 아니라 새로운 프로세스를 생성하고 상위 프로세스의 메모리를 참조합니다. 데이터가 수정되면 메모리의 이 부분이 실제로 복사됩니다.

프로세스 생성 및 파일 복사를 위한 Node.js+COW 기술에 대한 간략한 토론프로세스 생성을 포크, 즉 포크라고 부르는 이유는 완전히 독립적이지 않고 일부 부분이 두 부분으로 갈라져 있지만 대부분은 여전히 ​​동일하기 때문입니다.

그런데 실행할 코드가 다르다면 어떻게 될까요? 이때 새로운 코드 세그먼트, 데이터 세그먼트, 스택 세그먼트를 생성하고 새로운 코드를 실행하는 exec를 사용해야 합니다.

Node.js에서 포크 및 exec API를 사용할 수도 있습니다.

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 프로세스 생성의 기초이며, 쓰기 시 복사 기술이 얼마나 중요한지 보여줍니다.

요약

동일한 콘텐츠의 여러 복사본을 복사하는 것은 의심할 여지 없이 공간 낭비입니다. 따라서 운영 체제는 프로세스 생성 중에 파일을 복사하고 메모리를 복사할 때 Copy-On-Write 기술을 사용합니다. 만들어졌으니 가서 복사해 보세요.

Node.js는 fs.copyFile의 플래그 설정을 지원합니다. COPYFILE_FICLONE을 지정하여 Copy-On-Write 방법을 사용하여 파일을 복사할 수 있습니다. 또한 이 방법을 사용하여 하드 디스크 공간을 절약하고 성능을 향상시키는 것이 좋습니다. 파일 복사 중.

프로세스의 포크도 Copy-On-Write의 구현입니다. 프로세스의 코드 세그먼트, 데이터 세그먼트 및 스택 세그먼트를 새 콘텐츠에 직접 복사하지 않고 수정하는 경우에만 이전 항목을 참조합니다. 실제 메모리 복사본이 됩니다.

또한 Copy-On-Write에는 Immutable 구현, 분산 읽기-쓰기 분리 및 기타 분야에서 많은 응용 프로그램이 있습니다.

COW는 Node.js를 "게으른" 상태로 만들지만 성능은 더 좋습니다.

원본 주소: https://juejin.cn/post/6999497362255118366

작성자: zxg_God가 빛이 있어야 한다고 하셨어요

더 많은 프로그래밍 관련 지식을 원하시면 프로그래밍 입문을 방문해 주세요! !

위 내용은 프로세스 생성 및 파일 복사를 위한 Node.js+COW 기술에 대한 간략한 토론의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

AI Hentai Generator

AI Hentai Generator

AI Hentai를 무료로 생성하십시오.

뜨거운 도구

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)

Node V8 엔진의 메모리와 GC에 대한 자세한 그래픽 설명 Node V8 엔진의 메모리와 GC에 대한 자세한 그래픽 설명 Mar 29, 2023 pm 06:02 PM

이 기사는 NodeJS V8 엔진의 메모리 및 가비지 수집기(GC)에 대한 심층적인 이해를 제공할 것입니다. 도움이 되기를 바랍니다.

Node의 메모리 제어에 관한 기사 Node의 메모리 제어에 관한 기사 Apr 26, 2023 pm 05:37 PM

Non-Blocking, Event-Driven 기반으로 구축된 Node 서비스는 메모리 소모가 적다는 장점이 있으며, 대규모 네트워크 요청을 처리하는데 매우 적합합니다. 대규모 요청을 전제로 '메모리 제어'와 관련된 문제를 고려해야 합니다. 1. V8의 가비지 수집 메커니즘과 메모리 제한 Js는 가비지 수집 기계에 의해 제어됩니다.

최고의 Node.js Docker 이미지를 선택하는 방법에 대해 이야기해 볼까요? 최고의 Node.js Docker 이미지를 선택하는 방법에 대해 이야기해 볼까요? Dec 13, 2022 pm 08:00 PM

Node용 Docker 이미지를 선택하는 것은 사소한 문제처럼 보일 수 있지만 이미지의 크기와 잠재적인 취약점은 CI/CD 프로세스와 보안에 상당한 영향을 미칠 수 있습니다. 그렇다면 최고의 Node.js Docker 이미지를 어떻게 선택합니까?

Node의 파일 모듈에 대해 자세히 이야기해 보겠습니다. Node의 파일 모듈에 대해 자세히 이야기해 보겠습니다. Apr 24, 2023 pm 05:49 PM

파일 모듈은 파일 읽기/쓰기/열기/닫기/삭제 추가 등과 같은 기본 파일 작업을 캡슐화한 것입니다. 파일 모듈의 가장 큰 특징은 모든 메소드가 **동기** 및 ** 두 가지 버전을 제공한다는 것입니다. 비동기**, sync 접미사가 있는 메서드는 모두 동기화 메서드이고, 없는 메서드는 모두 이기종 메서드입니다.

Node.js 19가 공식적으로 출시되었습니다. Node.js의 6가지 주요 기능에 대해 이야기해 보겠습니다! Node.js 19가 공식적으로 출시되었습니다. Node.js의 6가지 주요 기능에 대해 이야기해 보겠습니다! Nov 16, 2022 pm 08:34 PM

Node 19가 정식 출시되었습니다. 이 글에서는 Node.js 19의 6가지 주요 기능에 대해 자세히 설명하겠습니다. 도움이 되셨으면 좋겠습니다!

Node.js의 GC(가비지 수집) 메커니즘에 대해 이야기해 보겠습니다. Node.js의 GC(가비지 수집) 메커니즘에 대해 이야기해 보겠습니다. Nov 29, 2022 pm 08:44 PM

Node.js는 GC(가비지 수집)를 어떻게 수행하나요? 다음 기사에서는 이에 대해 설명합니다.

Node의 이벤트 루프에 대해 이야기해 봅시다. Node의 이벤트 루프에 대해 이야기해 봅시다. Apr 11, 2023 pm 07:08 PM

이벤트 루프는 Node.js의 기본 부분이며 메인 스레드가 차단되지 않도록 하여 비동기 프로그래밍을 가능하게 합니다. 이벤트 루프를 이해하는 것은 효율적인 애플리케이션을 구축하는 데 중요합니다. 다음 기사는 Node.js의 이벤트 루프에 대한 심층적인 이해를 제공할 것입니다. 도움이 되기를 바랍니다!

노드가 npm 명령을 사용할 수 없으면 어떻게 해야 합니까? 노드가 npm 명령을 사용할 수 없으면 어떻게 해야 합니까? Feb 08, 2023 am 10:09 AM

노드가 npm 명령을 사용할 수 없는 이유는 환경 변수가 올바르게 구성되지 않았기 때문입니다. 해결 방법은 다음과 같습니다. 1. "시스템 속성"을 엽니다. 2. "환경 변수" -> "시스템 변수"를 찾은 다음 환경을 편집합니다. 3. nodejs 폴더의 위치를 ​​찾습니다. 4. "확인"을 클릭합니다.

See all articles