我正在编写一个多线程应用程序,到目前为止我有这个想法。我有一个FILE*[n]
wheren
是在运行时确定的数字。我打开所有 n 个文件进行读取,然后多个线程可以访问读取它。每个文件数据的计算是等价的,即如果假设串行执行,那么每个文件将同时保留在内存中。
每个文件可以任意大,所以不应该假设它们可以加载到内存中。
现在在这种情况下,我想减少发生的磁盘 IO 的数量。如果有人可以为这种情况建议任何共享内存模型,那就太好了(我不知道我是否正在使用一个,因为我对事物的实现方式知之甚少)。我不确定我应该如何实现这一点。换句话说,我只想知道实现这种场景的最有效模型是什么。我正在使用C
.
编辑:更详细的场景。
实际问题是我对 n 个文件中包含的数据有 n 个布隆过滤器,一旦文件中的所有元素都插入到相应的布隆过滤器中,我就需要进行成员资格测试。由于成员资格测试是数据文件的只读过程,因此我可以从多个线程读取文件,并且可以轻松并行化此问题。现在有数据的文件数量相当大(大约 20k 并注意文件数量等于布隆过滤器的数量)所以我选择生成一个线程来测试布隆过滤器,即每个布隆过滤器都有自己的线程,并且将一个一个地读取所有其他文件,并根据布隆过滤器测试数据的成员资格。在这种情况下,我想尽量减少磁盘 IO。