Как экспериментально определить квант планирования процесса / потока?

Поэтому я пытался экспериментально определить (средний) интервал времени на моей ОС Linux 4.4.0-98, учитывая подсказку отсюда. Ниже приведен мой код с использованием C ++ 14 STL.

#include <chrono>
#include <iostream>
#include <unistd.h>

int main(int argc, char** argv) {
std::chrono::time_point<std::chrono::high_resolution_clock> clock_t1 = std::chrono::high_resolution_clock::now();
std::chrono::time_point<std::chrono::high_resolution_clock> clock_t2 = std::chrono::high_resolution_clock::now();
std::chrono::duration<long long, std::nano> diff = clock_t2 - clock_t1;

std::chrono::duration<long long, std::nano> diff_precision = std::chrono::nanoseconds(1LL);

for(int i=0; i<5; i++) {
if(0 == fork()) {
break;
}
}

int num_tries = 0;
while(num_tries < 10) {
while((diff = clock_t2 - clock_t1) <= diff_precision) {
clock_t1 = clock_t2;
clock_t2 = std::chrono::high_resolution_clock::now();
}
std::cout << diff.count() << std::endl;
clock_t1 = std::chrono::high_resolution_clock::now();
clock_t2 = std::chrono::high_resolution_clock::now();
num_tries++;
}

return 0;
}

Проблема в том, что я всегда получаю одинаковые номера для всех процессов. например выход:

480
480
480
480
480
480

Кроме того, казалось странным, что временной интервал составляет около половины микросекунды. Поэтому я попробовал разные значения для diff_precision прямо от 1 нс до 100 мс. И для различной точности он дал выход в этом диапазоне; например, для точности 1 мс, это вывело бы кучу 5531380, Странно действительно.

Это даже надежный метод для определения временного интервала ОС? Или я должен просто доверять значениям из исходный код?

П.С .: «Вопрос с таким названием уже существует; пожалуйста, будьте более конкретны ».

1

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector