应该使用多少个线程来处理一百万个文件?你如何证明你的答案是正确的?这是去年操作系统考试的一道题,我很好奇你们是怎么想的。我认为 10,000 个线程,每个线程处理 100 个文件是一个很好的比例。
答案1
通常 I/O 是极限。拥有如此多的线程来等待 I/O 是没有意义的。
您可以定义最佳比率,以便 n 个 CPU 核心全时工作且 I/O 处于 100%。然后,最佳线程数由处理文件所需的时间与读取输入和写入输出所需的时间之比来定义。
例子:
- 如果读取和写入文件的时间比处理文件的时间长,那么一个线程就足够了。拥有第二个线程/进程来确保始终有可用的 I/O 请求可能是有意义的。不过,第二个线程应该以空闲 I/O 优先级运行。
- 如果处理一个文件所花费的时间是该文件 I/O 时间的十倍,那么十个线程将是最佳选择。