프로그램을 실행하는 동안 일반 printf를 수행하고 stdout을 파일로 리디렉션하는 경우(예: ./a.out > log.txt 2>&1 ) fprintf를 사용하고 문서에 로깅하는 경우 대기 시간 관점에서 성능 차이가 있습니까?
특히, 저는 ACE 로깅을 사용하고 현재 프로그램을 실행할 때 io를 파일로 리디렉션합니다. 로거를 파일과 연결하는 것이 성능 관점에서 유리합니까?
답변1
"대기 시간"에는 "효율적인" 파일 시스템 쓰기를 허용하기에 충분한 출력을 버퍼링하는 stdio 시스템이 포함될 수 있다는 점을 알아야 합니다. man 3 setbuf
자세한 내용은 참고 자료를 참조하세요. 버퍼링은 FILE *
기준 별로 이루어지므로 stderr
일반적으로 버퍼링되지 않은 것은 stdout
일반적으로 버퍼링됩니다. 그렇기 때문에 예제에 따라 stderr
출력과 출력이 모두 stdout
동일한 파일로 지정 되면 순서가 잘못되었습니다 .
FILE *
프로그램이 인스턴스를 열면 이미 setbuf()
조치를 취하거나 일반적인 "fflush()" 호출을 수행하지 않는 한 "지연 시간"을 예측할 수 없습니다.
fflush()
결국 충돌이 발생하기 전에 stdout에 대한 출력이 실제로 로그 파일에 저장되도록 충돌 프로그램을 많이 호출하게 되었습니다 . 저렴하지만 더럽습니다.