Die Syslog-Aufrufe geben pro Aufruf ein send () an einen AF_UNIX-Socket aus. Selbst wenn das syslogd die Daten verwirft, muss es zuerst gelesen werden. Das alles braucht Zeit.
Die Schreibvorgänge in / dev / null geben auch ein write () pro Aufruf aus. Da die Daten jedoch verworfen werden, können sie vom Kernel sehr schnell verarbeitet werden.
Die fprintf () - Aufrufe generieren nur ein write () für jeweils 4096 Bytes, die übertragen werden, dh etwa alle achtzig printf-Aufrufe. Bei jedem Vorgang werden nur Daten aus dem libc-Puffer in die Puffer des Kernels übertragen. Die Festschreibung der Festplatte ist (im Vergleich zumindest) sehr langsam, aber wenn keine expliziten Synchronisationsaufrufe vorliegen, können Aufrufe später (möglicherweise sogar nach Beendigung des Prozesses) erfolgen.
Kurz gesagt: syslog ist langsamer als / dev / null, weil es viel Arbeit leistet und langsamer als printf für eine Datei aufgrund von Pufferung.