tar|tar가 cp보다 훨씬 빠른 이유는 무엇입니까?

tar|tar가 cp보다 훨씬 빠른 이유는 무엇입니까?

디렉토리를 재귀적으로 복사하는 경우 를 사용하여 tar디렉토리를 압축한 다음 출력을 다른 디렉토리로 파이핑하여 압축을 푸는 것이 (또는 )을 tar사용하는 것보다 훨씬 빠른 것 같습니다 .cp -rcp -a

왜 이런거야? 그리고 cp내부적으로 동일한 방식으로 수행하면 왜 속도를 높일 수 없나요?

편집: 수만 개의 파일과 폴더가 깊이 중첩되어 있지만 총 크기가 약 50MB에 불과한 거대한 디렉터리 구조를 복사하려고 할 때 이 차이점을 발견했습니다. 그것이 관련이 있는지 확실하지 않습니다.

답변1

Cp모든 파일에 대한 루프에서 열기-읽기-닫기-열기-쓰기-닫기를 수행합니다. 따라서 한 곳에서 읽고 다른 곳으로 쓰는 것은 완전히 인터리브되어 발생합니다. Tar|tar별도의 프로세스에서 읽고 쓰기를 수행하며, 또한 tar여러 스레드를 사용하여 여러 파일을 '한 번에' 읽고 쓰기 때문에 디스크 컨트롤러가 한 번에 많은 데이터 블록을 가져오고 버퍼링하고 저장할 수 있습니다. 전체적으로, tar각 구성 요소가 효율적으로 작동할 수 있도록 하는 동시에 cp문제를 서로 다른 비효율적인 작은 덩어리로 분해합니다.

답변2

귀하의 편집 내용은 좋은 방향으로 진행됩니다. cp반드시 보다 느린 것은 아닙니다 tar | tar. 예를 들어 파일의 수량과 크기에 따라 다릅니다. 큰 파일의 경우 cp데이터를 밀어넣는 간단한 작업이므로 일반 파일 이 가장 좋습니다. 작은 파일이 많은 경우 실행 계획이 다르므로 tar더 나은 작업을 수행할 수 있습니다. 예를 들어 참조이 답변.

관련 정보