В игре несколько ограничений.Первый - общесистемный лимит открытых файлов, /proc/sys/fs/nr_open
.Обычно это диапазон миллионов.
Этот предел может продолжать учитываться для процессов, которые открывают файл, настраивают сопоставление, а затем снова закрывают файл.
Второй - этоза процесс getrlimit(2)
RLIMIT_NOFILE
за процесс число открытых файлов.Этот предел обычно находится в диапазоне 1024.
Этот предел, по-видимому, находится на самом высоком файловом дескрипторе, который будет выделен процессу, поэтому он, вероятно, не будет продолжать считатьсядля процессов, открывающих файл, настройте сопоставление, а затем снова закройте файл.
Третий - это объем адресного пространства, доступного для процесса (getrlimit(2)
RLIMIT_AS
и зависит от архитектуры (2, 3 или, может быть, 4 гигабайта (с исправлением адресного пространства 4: 4) на 32-битной или много много гигабайт на 64-битной). 3 гигабайта типично для x86 и из-за расположения адресного пространствапроблем, у вас, вероятно, будет 2,5 гигабайта для mmap
.
Умное использование fork(2)
может позволить вам настроить один процесс для каждого сопоставленного файла и иметь гигабайты на гигабайтах, отображаемых одновременно, даже на 32-битныхпроцессоров, но число процессов getrlimit(2)
RLIMIT_NPROC
на пользователя может ограничивать максимальное количество открытых процессов и, следовательно, файлов.