Name | Last modified | Size | Description | |
---|---|---|---|---|
Parent Directory | - | |||
yes.c | 2021-12-08 13:35 | 1.1K | ||
Makefile | 2021-12-05 03:00 | 1.3K | ||
yes(1)
Siehe die yes Manpage, um zu verstehen das dieses Programm macht.
In der Datei yes.c
werden mit ifdef
-Fallunterscheidungen verschiedene Ansätze implementiert. Diese unterscheiden sich zuerst in der Größe des lokalen Buffers, welche entweder
"yes\n"
, dann 4 Byte)BUFSIZ
(Makro-Konstante aus stdio.h
)groß ist. Der zweite Unterschied liegt im Ausgabemechanismus:
fwrite(3)
mit einem internen Buffer so groß wie der lokale Buffer.fwrite(3)
mit einem Zeilenbuffer, so groß wie der lokale Buffer.fwrite(3)
ohne einen Bufferwrite(2)
(auch ohne ein Buffer)In der Makefile baut das Pseudo-Target test
alle Variationen des Programms, und bemisst wie viele Zeichen in fünf Sekunden ausgebenden werden können. Dieses ist als eine “Art” “wissenschaftlicher” Ansatz zu verstehen, um die Effekte unterschiedlicher Einflüsse zu bemessen.
Hier sind die Ergebnisse, zusammengefasst:
Programm | Zeichen | Buffergröße | Ausgabe |
---|---|---|---|
./yes-ps-nb-fw |
3744967590 | Page-Size | Kein Buffer |
./yes-pa-xx-wr |
3725147790 | Page-Aligned | write |
./yes-bs-bb-fw |
3669958656 | BUFSIZ |
Block-Buffer |
./yes-ps-bb-fw |
3643596800 | Page-Size | Block-Buffer |
./yes-pa-bb-fw |
3445735424 | Page-Aligned | Block-Buffer |
./yes-ps-lb-fw |
3156094302 | Page-Size | Line-Buffer |
./yes-ps-xx-wr |
2950193610 | Page-Size | write |
./yes-bs-xx-wr |
2757712230 | BUFSIZ |
write |
./yes-pa-nb-fw |
2709903105 | Page-Aligned | Kein Buffer |
./yes-bs-nb-fw |
2640636180 | BUFSIZ |
Kein Buffer |
./yes-pa-lb-fw |
1728519973 | Page-Aligned | Line-Buffer |
./yes-ms-bb-fw |
121688064 | Message-Size | Block-Buffer |
./yes-ms-lb-fw |
107204608 | Message-Size | Line-Buffer |
./yes-bs-lb-fw |
24706056 | BUFSIZ |
Line-Buffer |
./yes-ms-xx-wr |
4931256 | Message-Size | write |
./yes-ms-nb-fw |
4541790 | Message-Size | Kein Buffer |
Wir erkennen das der beste Fall das Buffering umgeht, wenn wir in der Anwendung bereits uns darum sorgen können das so selten wie möglich Daten ausgegeben, ie. daher auch möglichst wenige Systemaufrufe gebraucht werden. Im schlimmsten Fall wird fwrite
/write
für jede Nachricht aufgerufen, was in diesem Fall zu einer ~800-fachen Verlangsamung führt, beim gleichen verhalten.
Zum selbst-Testen, muss man nur die Makefile
und yes.c
herunterladen im gleichen Verzeichnis, und
$ make -s test
ausführen.