1

所以我试图通过实验确定我的 Linux 4.4.0-98-generic OS 上的(平均)时间片,给出了这里的提示。以下是我使用 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所以我尝试了从 1ns 到 100ms的不同值。对于不同的精度,它给出了该范围内的输出;例如:对于 1ms 精度,它会输出一堆5531380. 确实很奇怪。

这甚至是找出操作系统时间片的可靠方法吗?还是我应该只相信源代码中的值?

PS:“该标题的问题已经存在;请更具体一点。” 哦,来吧。

4

0 回答 0