Рассмотрим:
#include <time.h>
#include <unistd.h>
#include <iostream>
using namespace std;
const int times = 1000;
const int N = 100000;
void run() {
for (int j = 0; j < N; j++) {
}
}
int main() {
clock_t main_start = clock();
for (int i = 0; i < times; i++) {
clock_t start = clock();
run();
cout << "cost: " << (clock() - start) / 1000.0 << " ms." << endl;
//usleep(1000);
}
cout << "total cost: " << (clock() - main_start) / 1000.0 << " ms." << endl;
}
Вот пример кода. В первых 26 итерациях цикла синхронизации функция run
стоит около 0,4 мкс, но тогда стоимость сокращается до 0,2 мкс.
Когда usleep
раскоментирован, цикл задержки принимает 0,4 мск для всех прогонов, никогда не ускоряясь. Почему?
Код скомпилирован с помощью g++ -O0
(без оптимизации), поэтому цикл задержки не оптимизирован. Он работает на Intel (R) Core (TM) i3-3220 CPU @3,30 GHz, с 3.13.0-32-generic Ubuntu 14.04.1 LTS (Trusty Tahr).