c - 如何让多个进程同时读取同一个文件会减慢读取速度?

标签 c linux multithreading file file-io

我正在做一些关于 Ubuntu 15.10 x64 的研究工作。我想研究是否有办法让 2 个或更多进程同时读取一个文本文件并减慢彼此的读取速度。

例如,两个进程P1P2。文本文件 /etc/example.txt。它有 1KB 数据。

P1的伪代码:

for (int i = 0; i < 1000000; i ++) {
  str = read_file ('/etc/example.txt', 'r');
  print(str);
}

P2的伪代码:

for (int i = 0; i < 100; i ++) {
  str = read_file ('/etc/example.txt', 'r');
  print(str);
}

time = get_the_whole_run_time();
print(time / 100);

条件一:

P1 正在运行。 P2 用于与 P1 进行“赛跑”,并计算平均阅读时间 TIME_1

条件二:

P1 正在运行。仅运行 P2 并计算平均阅读时间 TIME_2

我的目标是使 TIME_1 显着高于 TIME_2(这是为了研究目的)。但是我的实验不是那样的。 TIME_1TIME_2 几乎相同。

我知道可能有一些因素(例如文件系统缓存)会影响结果。我使用命令:echo 3 >/proc/sys/vm/drop_caches 来清除缓存。但它不起作用。

有什么想法吗?谢谢!

最佳答案

使用大文件进行实验。

请注意,如果 P1 和 P2 同时运行,平均时间可能会少于单个进程;因为其中一个进程可能会受益于另一个进程刚刚建立的新缓存,因此无需等待物理 I/O。您的实验很难设置,因为其中有很多变量和许多具有非正交效应的系统内部机制;并且可能会出现令人惊讶的结果。

关于c - 如何让多个进程同时读取同一个文件会减慢读取速度?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36147243/

相关文章:

linux - 查看我的程序在终端中使用了多少内存

linux - Google Cloud + Linux TCP 连接被拒绝,原因是什么?

php - 如何在 Url 中隐藏 .php 扩展名

c++ - 对原子类 : memory_order_relaxed 感到困惑

2 个线程的 Java 扫描器

c - tizen 中的最佳线程池大小

c - 将整数提升为 long 或 unsigned long

c - 将char [128]数组写入C中的文件

c++ - 在运行之前获取 std::thread 的 thread:id?

c - 从串行端口读取时如何实现 read() 超时 (C/C++)