Размер стека по умолчанию для pthreads

Верхний уровень procmail рецепты резервируются для присвоения procmail переменные. Добавьте следующее к верхней части Вашего procmail рецепта.

MAILDIR="$HOME/Maildir/"

При определении, куда почта должна быть поставлена, Вы определили Xyz как файл, не каталог. Это должно вместо этого читать:

:0:
* ^TO_myemailaddress@domain.com
Xyz/

procmail чрезвычайно мощно со многими опциями. Я всегда поражаюсь тем, что это может сделать.

24
05.09.2018, 14:54
2 ответа

Атрибут [114861] размер стека [114862] должен определять минимальный размер стека (в байт), выделенных для стека создаваемых потоков.

В вашем примере размер стека установлен в 8388608 байт, что соответствует 8 МБ, как возвращается командой [114579]ulimit -s[114580]. Так что это совпадает.

cross-ref options

Из описания [114581]pthread_create()[114582]:

На [114863]Linux/x86-32[114864] размер стека по умолчанию для нового потока равен [114865]2. мегабайты[114866]. В соответствии с реализацией потоковой модуляции NPTL, если [114867]RLIMIT_STACK [114868] ограничение на мягкие ресурсы на момент запуска программы. любое значение, кроме "неограниченного", то он определяет по умолчанию размер стопки новых нитей. Используя [114869]pthread_attr_setstacksize[114870](3), можно получить размер стека [114870](3). атрибут размера стека может быть явно задан в используемом аргументе attr для создания потока, чтобы получить размер стека, отличный от по умолчанию.

echo -n "Hello World "; uptime

Таким образом, размер стека потоков может быть установлен либо с помощью функции set выше, либо с помощью свойства системы [114585]ulimit[114586]. Для 16k, о котором вы говорите, непонятно, на какой платформе вы это видели и/или был ли для этого установлен системный лимит.

>UnxUtils\bin\sh
WINCOMP# echo -n "Hello "; echo World
Hello World
Смотрите страницу [114587]pthread_create page[114588] и [114589]here[114590] для некоторых интересных примеров по этому поводу.[114209].
21
27.01.2020, 19:40

Фактически, размер вашего виртуального стека составляет 8388608 байт (8 МБ). Конечно, естественно сделать вывод, что это не может быть правильным, потому что это смехотворно большой объем памяти для каждого потока, потребляемого для своего стека, когда в 99% случаев пара килобайт, вероятно, все, что им нужно.

Хорошая новость в том, что ваш поток использует только тот объем физической памяти, который ему действительно необходим. Это одна из волшебных возможностей, которые ваша ОС получает от использования аппаратного модуля управления памятью (MMU) в вашем процессоре. Вот что происходит:

  1. ОС выделяет 8 МБ виртуальной памяти для вашего стека, настраивая таблицы страниц MMU для вашего потока. Это требует очень небольшого объема оперативной памяти для хранения только записей таблицы страниц.

  2. Когда ваш поток запускается и пытается получить доступ к виртуальному адресу в стеке, которому еще не назначена физическая страница, MMU запускает аппаратное исключение, называемое «отказ страницы».

  3. Ядро ЦП реагирует на исключение ошибки страницы, переключаясь в привилегированный режим выполнения (который имеет свой собственный стек) и вызывает функцию обработчика исключений ошибки страницы внутри ядра.

  4. Ядро выделяет страницу физической ОЗУ этой странице виртуальной памяти и возвращается обратно потоку пользовательского пространства.

Поток пользовательского пространства не видит ничего из этого. С его точки зрения, он просто использует стек, как если бы память была там все время. Между тем, стек автоматически увеличивается (или не увеличивается) для удовлетворения потребностей потока.

MMU - ключевая часть оборудования современных компьютерных систем.В частности, он отвечает за большую часть «магии» в системе, поэтому я настоятельно рекомендую узнать больше о том, что делает MMU, и о виртуальной памяти в целом. Кроме того, если ваше приложение чувствительно к производительности и имеет дело со значительным объемом данных, вы должны понимать, как работает TLB (кеш таблицы страниц MMU) и как вы можете реструктурировать свои данные или свои алгоритмы, чтобы максимизировать процент попаданий TLB.

47
27.01.2020, 19:40

Теги

Похожие вопросы