所以我试图通过实验确定我的 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:“该标题的问题已经存在;请更具体一点。” 哦,来吧。