디렉토리를 재귀 적으로 복사 tar
하려면 디렉토리 tar
를 압축 한 다음 출력 을 언 팩킹하기 위해 출력을 파이핑하는 것이 cp -r
(또는 cp -a
)를 사용하는 것보다 훨씬 빠릅니다 .
왜 이런거야? 그리고 cp
후드에서 같은 방식으로 더 빨리 만들 수없는 이유는 무엇입니까?
편집 : 수만 개의 파일과 폴더가 포함되어 있고 깊이 중첩되어 있지만 약 50MB에 불과한 거대한 디렉토리 구조를 복사하려고 할 때이 차이점을 발견했습니다. 관련이 있는지 확실하지 않습니다.
답변
Cp
모든 파일에 대해 루프에서 open-read-close-open-write-close를 수행합니다. 따라서 한 곳에서 읽고 다른 곳으로 쓰는 것은 완전히 인터리브됩니다. Tar|tar
별도의 프로세스에서 읽고 쓰기를 수행하며, tar
여러 스레드를 사용하여 여러 파일을 ‘한 번에’읽고 (쓰기) 수행하므로 디스크 컨트롤러가 한 번에 많은 데이터 블록을 페치, 버퍼링 및 저장할 수 있습니다. 대체로 tar
각 구성 요소가 효율적으로 작동하면서도 cp
문제가 발생하는 이질적인 비효율적 인 작은 청크를 분류 할 수 있습니다.