내가 작성 중인 스크립트의 일부는 rm -rf
두 개의 디렉토리를 완전히 제거하는 데 사용됩니다.
이러한 디렉터리는 상대적으로 크기가 크므로 제거하는 데 상당한 시간이 걸릴 수 있습니다.
현재 디렉터리는 순차적으로 제거됩니다.
rm -rf dir1
rm -rf dir2
다음을 통해 백그라운드에서 동시에 제거하는 것이 더 빠를까요?
rm -rf dir1 &
rm -rf dir2 &
wait
그렇다면 왜?
답변1
때에 따라 다르지.
제거되는 파일이 동일한 파일 시스템 및 하드웨어 장치에 있는 경우 운영 체제는 하드웨어에서 실제 작업을 수행하기 위해 물리적 리소스를 기다리기 때문에 결국 순차적이 됩니다. 의 각 인스턴스는 rm
작업을 대기열에 추가하므로 다른 인스턴스가 완료되면 하나를 사용할 수 있지만 이로 인해 큰 개선이 있을 것으로 기대하지는 마십시오.
2개의 서로 다른 FS/하드웨어 장치에 있는 파일에서 이 문제가 발생하면 rm
사실상 병렬 및 비동기식이므로 속도가 두 배 빨라집니다.
답변2
alx741이 말했듯이 별도의 파일 시스템에 있지 않으면 어떤 식으로든 실질적인 이점을 얻을 수 없을 것이라고 생각합니다. 700MB 파일로 테스트를 해봤습니다. 내 생각을 뒷받침하는 테스트는 다음과 같습니다. 가지고 놀 수 있는 로컬 파티션이 여러 개 없으므로 테스트할 수 없습니다.
여기서는 순차적으로 하나의 명령으로 사용됩니다.
time rm -f test.dat1 test.dat2
real 0m0.297s
user 0m0.000s
sys 0m0.295s
여기는 동시에
time rm -f test.dat1 &
time rm -f test.dat2 &
real 0m0.145s
user 0m0.000s
sys 0m0.144s
real 0m0.150s
user 0m0.000s
sys 0m0.150s
여기서는 두 개의 별도 명령으로 다시 순서대로 표시됩니다.
time rm -f test.dat1
time rm -f test.dat2
real 0m0.146s
user 0m0.000s
sys 0m0.146s
real 0m0.153s
user 0m0.000s
sys 0m0.152s
답변3
이론적으로 동시(동시/병렬) 실행이 가능합니다.더 느리게. 운영 체제가 각 디렉터리를 클러스터된 상태로 유지할 수도 있다고 생각할 수 있습니다. 즉, 의 내용은 dir1
서로 가까운 inode 번호를 갖고 서로 가까운 데이터 블록을 사용할 수 있습니다. 그리고 에 대해서도 마찬가지일 수 있습니다 dir2
. 그러나 의 내용은 dir1
의 내용과 유사하지 않을 수 있습니다 dir2
. (이는 운영 체제 버전, 파일 시스템 유형 및 디렉터리 생성 기록에 따라 달라질 수 있습니다.) 이 경우(두 디렉터리가 서로 가깝지 않고) 파일 시스템이 디스크(HDD)에 있는 경우 ) 물리적으로 I/O 헤드를 검색해야 하는 경우 동시 실행에는 순차 실행보다 더 많은 검색(→ 스래싱)이 필요할 수 있습니다.