tar | tar가 왜 cp보다 훨씬 빠릅니까? 디렉토리 tar를 압축 한 다음 출력 을

디렉토리를 재귀 적으로 복사 tar하려면 디렉토리 tar를 압축 한 다음 출력 을 언 팩킹하기 위해 출력을 파이핑하는 것이 cp -r(또는 cp -a)를 사용하는 것보다 훨씬 빠릅니다 .

왜 이런거야? 그리고 cp후드에서 같은 방식으로 더 빨리 만들 수없는 이유는 무엇입니까?

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



답변

Cp모든 파일에 대해 루프에서 open-read-close-open-write-close를 수행합니다. 따라서 한 곳에서 읽고 다른 곳으로 쓰는 것은 완전히 인터리브됩니다. Tar|tar별도의 프로세스에서 읽고 쓰기를 수행하며, tar여러 스레드를 사용하여 여러 파일을 ‘한 번에’읽고 (쓰기) 수행하므로 디스크 컨트롤러가 한 번에 많은 데이터 블록을 페치, 버퍼링 및 저장할 수 있습니다. 대체로 tar각 구성 요소가 효율적으로 작동하면서도 cp문제가 발생하는 이질적인 비효율적 인 작은 청크를 분류 할 수 있습니다.


답변