Должен ли я пытаться «сбалансировать» свои потоки, или Linux делает это?

Это связано с тем, что обработчик сигнала действителен как для родителя, так и для дочернего элемента после вызова fork ().

Поскольку разветвленный дочерний процесс выполняется в той же группе процессов, что и родительский, оба процесса получают сигнал.

Вы можете использовать эту команду printf ():

printf("interrupt has been invoked in pid %d\n", (int)getpid());

Драйвер tty имеет настроенную группу процессов tty, и если вы наберете ^C, а ^C настроен как символ TTY INTR, то драйвер tty отправляет SIGINT всем процессам, которые находятся в той же группе процессов, что и tty. Водитель.

8
06.06.2020, 20:13
1 ответ

Лучший ответ на этот вопрос: "попробуй и посмотри"... проведи несколько стресс-тестов и посмотри, что дает наилучшие результаты. Это связано с тем, что очень незначительные нюансы в поведении ваших потоков могут вызвать различия в производительности.


Следующее во многом основано на моем собственном опыте...

С чего начать?

Способность Linux предотвращать голодание потоков довольно хороша. Это не обязательно означает, что каждый поток получит равную долю пирога, но все потоки, по крайней мере, получат часть пирога. Если у вас есть два потока, конкурирующих за процессорное время... скажем, один пытается использовать 100% ЦП, а другой пытается использовать только 10%... тогда не удивляйтесь, если это уравновесит 91% и 9% или где-то еще вокруг этого.

Общая производительность может снизиться, если на конкретный ресурс сильно превышено количество подписок. Это особенно верно для дискового ввода-вывода на вращающихся жестких дисках. Головке приходится физически перемещаться (искать )между местами на диске, а непрерывные колебания между разными файлами могут вызвать значительное замедление. Но этот эффект часто довольно мал, если один поток сильно связан с вводом-выводом, а другой хотел бы выполнять небольшой ввод-вывод.

Вместе эти две вещи означают, что часто лучше иметь на 20% больше подписчиков, чем на 20% меньше подписчиков. Другими словами, не резервируйте время ЦП для потоков, которые не пытаются использовать много ЦП.

Например, :Если у вас есть потоки, привязанные к ЦП, и потоки, связанные с дисковым вводом-выводом, и у вас есть 8 ядер и 1 жесткий диск, то начните с 8 потоков, привязанных к ЦП, и одного потока, связанного с жестким диском, ввода-вывода. 7 и 1 могут просто оставлять ядро ​​бездействующим большую часть времени. 8 и 1 почти наверняка не истощат поток HD, что означает, что вы полностью используете как HD, так и ЦП.

Опасность короткоживущих нитей

Просто имейте в виду, что Linux может столкнуться с большим количеством короткоживущих потоков.Это более очевидно при преднамеренных попытках повредить систему . Но постоянное порождение потоков/процессов может подтолкнуть Linux к плохому поведению.

В своем вопросе вы описали выделенные рабочие потоки, которые звучат как долгоживущие потоки. Это звучит как правильный подход.

Эффект лондонского автобуса

Ждешь автобус полчаса, а потом приезжает сразу 5. Это происходит потому, что пассажиры, садящиеся в передний автобус, тормозят его. Отсутствие пассажиров в более поздних автобусах ускоряет их, вызывая эффект скопления.

Та же проблема может возникнуть при многопоточности, особенно когда потоки конкурируют за ресурсы. Если у вас есть потоки, которые предсказуемо чередуются между задачами, например чтение с одного диска, а затем запись на другой, то они могут иметь тенденцию группироваться вместе, а не стохастически рассеиваться, как вы можете ожидать. Таким образом, один ресурс может замедлить использование другого. По этой причине иногда бывает лучше дополнительно разделить задачи потока.

группы

Я не буду вдаваться в подробности. Но я должен упомянуть, что в Linux есть возможность, называемая «cgroups», которая позволяет вам группировать процессы и ограничивать их коллективные ресурсы. Это может быть очень полезно при дальнейшей настройке производительности.

Их краткое обсуждение здесь . Но я бы посоветовал вам потратить немного времени на Google, чтобы увидеть их все возможности, потому что они могут помочь вам в долгосрочной перспективе.

3
18.03.2021, 23:34

Теги

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