스크립트를 실행하고 있는데 걸리는 시간을 측정한 결과 특정 mv 명령에 -v를 사용하면 속도가 훨씬 느려지는 것을 발견했습니다(모든 출력이 파일로 리디렉션됨).
그렇다면 -v
(상세 모드) 명령 실행 속도가 느려지는 이유는 다음과 같습니다.
mv file.txt newname.txt
mv -v file.txt newname.txt
수백만 개의 파일을 더 빠르게 처리하고 싶으신가요?
답변1
프로그램이 실행될 때마다 파일에 인쇄할 때 IPC를 사용하여 커널과 통신해야 합니다. 리디렉션이 필요하며 파일 시스템은 실제로 버퍼링된 변경 사항을 작성해야 합니다. 이로 인해 프로그램 런타임 일정이 중단되고 버퍼링을 위해 상대적으로 오랜 시간을 기다려야 하며 수행 중인 모든 작업을 수행해야 하며 대부분은 IO 잠금이 아닐 수 있습니다. 물론 이것은 매우 일반적인 현상이며 다른 명령에서는 매우 다르게 적용됩니다. 그러나 어쨌든 IO 잠금 상태가 되는 명령은 verbose 플래그를 사용하여 실행될 때 그다지 다르지 않을 것입니다.
답변2
장황하다는 것은 더 많은 일을 한다는 것을 의미하기 때문입니다. 더 많이 하는 것은 덜 하는 것보다 더 오래 걸립니다.
답변3
Verbose 호출은 터미널에서 정보를 처리하여 화면에 표시하고, 채널 I/O는 공간 할당을 위해 버퍼 캐시를 요청하는데, 이는 종종 verbose로 과밀화됩니다. 이로 인해 전체 프로세스가 지연됩니다. 따라서 Verbose는 더 많은 리소스를 사용하므로 속도가 느려집니다.