#include <stdio.h>
#include <stdarg.h>
#include <sys/time.h>
char kBuff[1024];
const char* kMsg = "0123456789 abcdefghizklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ";
const long kThreshold = 100; //us
void func(const char* fmt, ...) {
struct timeval start, end;
gettimeofday(&start, NULL);
va_list ap;
va_start (ap, fmt);
vsnprintf(kBuff, sizeof(kBuff) - 1, fmt, ap);
va_end (ap);
gettimeofday(&end, NULL);
long during = (end.tv_sec - start.tv_sec) * 1000 * 1000 + (end.tv_usec - start.tv_usec);
if (during > kThreshold)
printf("%ld, ", during);
}
int main() {
long index = 0;
for(int i = 0; i < 1000000; i++) {
func("Index:%8ld Msg:%s", index++, kMsg);
}
}
Я запускаю довольно простой код 10 000 000 раз, и иногда время выполнения конкретного фрагмента кода сильно варьируется, иногда достигая 1000 + нас. Результат ниже:
105, 106, 135, 115, 121, 664, 135, 1024, 165, 130,
Программа работает в виртуальноймашина Ubuntu-18.04 на Windows-10
g ++ -ggdb -O2 test.cpp
gettimeofday(&start, NULL);
va_list ap;
va_start (ap, fmt);
vsnprintf(kBuff, sizeof(kBuff) - 1, fmt, ap);
va_end (ap);
gettimeofday(&end, NULL);
Приведенный выше код не попадает в ядро и неwait I / O, не ждет блокировок, так почему время выполнения может достигать 1000 мкс?
Одна из причин, которую я догадался, была из-за планирования операционной системы. но как мне доказать это?
Если в этом причина, то как я могу точно измерить время работы программы?