Es gibt keine Methode, die Ihnen ein Äquivalent von sys oder usertime gibt, wie vom Befehl time
berichtet, der genauer sein wird. Ein Großteil der scheinbaren Präzision des Befehls time
ist falsche Präzision.
Die Technik für die Handhabung ist, diese Codeschnipsel in enge Schleifen zu bringen, die sie Tausende Male aufrufen und herauszufinden, wie lange eine gegebene Schleife davon ausgeht. Und selbst dann sollten Sie das Experiment ein paar Mal wiederholen und die niedrigste Zeit wählen.
Hier ist eine Analogie, die beschreibt, warum die Präzision falsch ist und was ich damit meine. Angenommen, Sie verwenden jemanden, der eine Stoppuhr verwendet, um ein Rennen zu messen, indem er manuell auf den Knopf drückt, wenn das Rennen begonnen hat und wenn die Person, die getaktet wird, die Ziellinie überquert. Angeblich ist deine Stoppuhr genau auf die 100stel Sekunde genau. Aber diese Genauigkeit ist falsch, weil sie durch die Fehler, die durch die Reaktionszeit der Person, die den Knopf drückt, verursacht wird, in den Schatten gestellt werden.
Das ist ziemlich genau analog zu warum time
gibt Ihnen Genauigkeit, die angeblich in Mikrosekunden ist, aber ist wirklich deutlich weniger präzise. In einem gegebenen System ist zu jedem Zeitpunkt viel los und all diese Dinge führen zu Fehlern in den Berechnungen. Die Interrupts von Netzwerk-IO oder Platten-IO unterbrechen den Zeitgeber zum Ausführen des Schedulers, was andere Prozesse mit dem L1- oder L2-CPU-Cache tun. Das alles summiert sich.
Mit etwas wie valgrind
, die Ihr Programm auf einer simulierten CPU ausführt, können Sie Zahlen geben, die scheinbar genau auf die Anzahl der CPU-Zyklen passen. Aber diese Präzision ist nicht das, was Sie in der realen Welt erleben werden. Es ist besser, die Technik, die ich ursprünglich beschrieben habe, zu verwenden und einfach zu akzeptieren, dass diese Zeiten unscharf sein können.
Wow, danke für die schnelle und ausführliche Antwort! – Stobbej
Ich war mir der Tatsache bewusst, dass zu einem bestimmten Zeitpunkt viele Prozesse laufen, weshalb ich die System- und Nutzungszeit anforderte. Für diese Zahlen geben Sie die Zeit, in der die CPU gerade damit beschäftigt ist, Ihren Anruf zu bearbeiten, oder? Ich weiß, dass ich jetzt mit einer einzigen Messung nicht mehr Präzision erreichen kann, also probiere ich die Loop-Lösung! – Stobbej
@Stobbej - Ja, diese beiden Zahlen sollen die Zeit darstellen, die die CPU speziell für Ihren Prozess benötigt. Aber das macht sie merkwürdiger. Es ist eigentlich nicht so einfach, das definitiv zu messen. – Omnifarious