【问题标题】:How to make reading the same file at the same time in multiple processes slow down the reading?如何使在多个进程中同时读取同一个文件减慢读取速度?
【发布时间】:2016-07-08 22:02:27
【问题描述】:

我正在对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

条件2:

P1 正在运行。只运行P2,它会计算平均阅读时间TIME_2

我的目标是使 TIME_1 明显高于 TIME_2(这是出于研究目的)。但我的实验结果并非如此。 TIME_1TIME_2 几乎相同。

我知道文件系统缓存之类的东西可能会影响结果。我使用命令:echo 3 &gt; /proc/sys/vm/drop_caches 清除缓存。但它不起作用。

有什么想法吗?谢谢!

【问题讨论】:

  • 您的数据文件很可能 1 KB 将被完全缓存,即 两者 都不会真正停止另一个。
  • 也许试试 1GB。 1KB 读取将是一个原子 IO 操作。放慢速度的机会不大。

标签: c linux multithreading file file-io


【解决方案1】:

使用大文件进行实验。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-01-05
    • 1970-01-01
    • 2015-04-18
    • 2015-11-20
    • 2012-01-01
    • 2011-04-01
    • 1970-01-01
    相关资源
    最近更新 更多