Мне нужно создать большой файл (несколько гбайт) в/dev/shm. который является RAMdisk на машинах Linux. Это должно быть как можно быстрее. В настоящее время я использую 5 отдельных потоков POSIX в C для создания последовательных сегментов 100 мегабайт, тогда у меня есть другой поток, который объединяет их в основной выходной файл.Создание большого файла в/dev/shm параллельно: производительность
Это быстро, но я хочу идти быстрее. Можно ли удалить конкатенатную нить? Есть ли способ открыть файл, и каждый поток пишет его сегмент 100 мегабайт в нужное место в конечном выходном файле?
Я пробовал это, и это может сработать. Но я смог «создать» файлы, которые были больше, чем содержащая их файловая система. Так или иначе, это не кажется правильным. –
Итак, основная идея такова: во-первых, используйте truncate для создания огромного файла, затем каждый поток использует lseek() для перемещения вперед к своему месту в файле, затем этот поток записывает данные там? Это правильно? –
Хорошо. ММАП(). Не думал об этом. –