我正在编写一个程序,从网络接收大量数据(以不同大小的块为单位),处理并将其写入内存。由于某些数据块可能非常大,因此我的当前方法是限制所使用的缓冲区大小。如果一个块比最大缓冲区大小还要大,我会将数据写入临时文件,并稍后读取该文件的块来进行处理和永久存储。
我想知道是否可以改进这个方法。我已经阅读了一段时间有关mmap的内容,但不确定它是否能够帮助我。我的想法是使用mmap来读取临时文件。这样有帮助吗?我最关心的是,偶尔出现的大数据块不应该填满我的主内存,导致其他所有东西都被交换出去。
此外,您认为使用临时文件的方法有用吗?我应该这样做吗?或者,我应该相信linux内存管理器来为我完成这项工作?还是我应该完全采用其他方法?
mmap()
,您会导致该内存由文件支持,而不是由交换(所谓的匿名内存)支持。在内存压力下,内核可能会更积极地回收支持文件的内存,而不是匿名内存,或者它可能反过来,我不知道。 - ninjalj