gzip *.txt 및 gzip test.txt & gzip test2.txt &

gzip *.txt 및 gzip test.txt & gzip test2.txt &

gzip 프로세스 속도를 높이고 싶습니다. (서버는 AIX 7.1입니다.)

보다 구체적으로 현재 구현을 gzip *.txt완료하는 데 최대 1시간이 걸립니다. (추출된 파일은 대용량, 총 10개 파일입니다)

Q: 달리기가 더 효율적일까요?

pids=""
gzip file1.txt &
pids+=" $!"
gzip file2.txt &
pids+=" $!"
wait $pids

비교하다

gzip *.txt 

병렬성, CPU 소비 등의 측면에서 gzip *txt백그라운드(&)에서 gzip과 동일하게 작동합니까, 아니면 다른 옵션이 더 효율적입니까?

답변1

바퀴를 재발명하지 마세요. 을 사용할 수 pigz있으며 병렬 구현은 gzip배포 저장소에 있어야 합니다. 그렇지 않다면 다음과 같이 시작할 수 있습니다.여기.

일단 설치되면 pigz다음과 같이 사용하십시오 gzip:

pigz *txt

다음을 사용하여 생성된 5개의 30M 파일에 대해 이것을 테스트했습니다 for i in {1..5}; do head -c 50M /dev/urandom > file"$i".txt; done.

## Non-parallel gzip
$ time gzip *txt
real    0m8.853s
user    0m8.607s
sys     0m0.243s

## Shell parallelization (same idea as yours, just simplified)
$ time ( for i in *txt; do gzip $i & done; wait)

real    0m2.214s
user    0m10.230s
sys     0m0.250s

## pigz
$ time pigz *txt

real    0m1.689s
user    0m11.580s
sys     0m0.317s

답변2

유일한 실제 방법은 시간을 맞추는 것입니다. gzip *.txt별도의 파일이기 때문에 한 번에 하나씩 수행하고 싶습니다 .

병렬로 실행( gzip file1.txt등을 사용하여)가능한더 빠르지만 메모리 양, CPU 코어 수 등에 따라 다릅니다. 가장 중요한 요소는 이 작업을 수행하는 동안 디스크 경합이 발생하여 속도가 느려질 수 있다는 것입니다(SSD가 아닌 한 어느 정도). 그들은 함께 비슷한 양의 CPU 시간을 사용합니다.

나는 보통 gzip *.txt또는 유사한 것을 사용합니다.

관련 정보