我正在编写一个多线程应用程序,截至目前,我有这个想法。我有一个FILE*[n]
,其中n
是一个在运行时确定的数字。我打开所有n个文件进行读取,然后多个线程可以访问并读取它。每个文件的数据计算是等效的,即如果假设串行执行,则每个文件将同时保留在存储器中。在写入文件时减少磁盘访问次数C
每个文件都可以是任意大的,所以不应该认为它们可以加载到内存中。
现在在这种情况下,我想减少发生的磁盘IO的数量。如果有人可以为这种情况建议任何共享内存模型,那将是非常好的(我不知道我是否正在使用一个模型,因为我对于实现的方式知之甚少)。我不知道该如何实现。换句话说,我只是想知道什么是最有效的模型来实现这种情况。我正在使用C
。
编辑:更详细的情况。
实际的问题是我有n个包含在n个文件中的数据的布隆过滤器,并且一旦文件中的所有元素都插入相应的布隆过滤器中,我需要做成员测试。由于成员资格测试是对数据文件的只读过程,因此我可以从多个线程读取文件,并且可以轻松并行处理此问题。现在有数据的文件数量相当大(大约20k,注意文件数等于布隆过滤器的数量),所以我选择产生一个线程用于测试一个布隆过滤器,即每个布隆过滤器都有它自己的线程,将逐一读取其他所有文件,并根据bloom过滤器测试数据的成员资格。我希望在这种情况下尽量减少磁盘IO。
你在说什么平台?如果你在Linux上,最简单的方法是将它们作为内存映射文件打开,并让操作系统处理它。 (我敢肯定,Windows有相同的功能。) –
我在linux上。你能解释一下吗,请 –
不确定你试图通过共享内存分享?如果你正在考虑内存映射文件,那不会严重减少IO(你仍然必须阅读所有你必须阅读的东西)。为什么你认为IO是一个问题?我认为这里没有足够的细节来给出有意义的建议......我注意到您的问题标题提到了写入文件,但是没有提及如何/在哪里将文件写入正文 –
John3136