백그라운드에서 디렉토리를 순차적으로 삭제하는 것과 동시에 디렉토리를 삭제하는 것 [중복]

백그라운드에서 디렉토리를 순차적으로 삭제하는 것과 동시에 디렉토리를 삭제하는 것 [중복]

내가 작성 중인 스크립트 중 일부는 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서로 가까운 아이노드 번호를 가질 수도 있고, 서로 가까운 데이터 블록을 사용할 수도 있다. 에 대해서도 마찬가지일 수 있습니다 dir2. 그러나 의 내용은 dir1의 내용과 가깝지 않을 수 있습니다 dir2. (이는 운영 체제 버전, 파일 시스템 유형 및 디렉터리 생성 기록에 따라 달라질 수 있습니다.) 이 경우(두 디렉터리가 서로 가깝지 않고) 파일 시스템이 디스크(HDD)에 있는 경우 다음을 물리적으로 조회합니다. I/O 헤더가 필요합니다. 그러면 동시 실행에는 순차 실행보다 더 많은 조회(→ 스래싱)가 필요할 수 있습니다.

관련 정보