Io 리디렉션 및 파일 로깅 성능 C/C++

Io 리디렉션 및 파일 로깅 성능 C/C++

프로그램을 실행하는 동안 일반 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에 대한 출력이 실제로 로그 파일에 저장되도록 충돌 프로그램을 많이 호출하게 되었습니다 . 저렴하지만 더럽습니다.

관련 정보