примите () с сокетами, совместно использованными несколькими процессами (на основе предварительного разветвления Apache)

Можно сделать следующий

cat file | xargs vim

, Где "файл" содержит список файлов, это откроет файлы на той же сессии энергии. Как обычно, при открытии нескольких буферов, можно перейти вперед с: миллиард и назад: BP.

16
задан Andrew Dalke 18 August 2009 в 12:55
поделиться

1 ответ

В отношении (1) прослушиватель - это просто ссылка на существование сокета, на котором можно принимать соединения. Поскольку Apache может одновременно принимать соединения на нескольких сокетах, например, 80/443, то существует несколько сокетов слушателя. Каждый дочерний процесс должен будет прослушивать все эти сокеты, когда придет время. Поскольку accept () может выполняться только на одном сокете за раз, ему предшествует опрос / выбор, поэтому известно, на каком сокете слушателя следует выполнить accept.

Что касается (2), это глобальный или межпроцессный мьютекс. То есть блокирование одного процесса блокирует другие процессы, пытающиеся получить такую ​​же блокировку. Хотя accept () будет технически сериализовать процессы, наличие нескольких сокетов слушателя означает, что вы не можете полагаться на это, так как вы этого не делаете. Я заранее не знаю, на каком сокете выполнить прием. Даже при наличии единственного сокета слушателя причина мьютекса accept в том, что при большом количестве процессов, обрабатывающих запросы, это может быть довольно дорого, если операционная система будит все процессы, чтобы увидеть, какой из них затем возвращает для него accept (). Поскольку в Apache в режиме предварительной вилки может быть более 100 процессов, это может вызвать проблемы.

Итак, если у вас есть только один сокет слушателя и вы знаете, что только несколько процессов хотят выполнить вызов accept (), тогда вы, возможно, можете отказаться от перекрестного процесса принять мьютекс.

тогда это может быть довольно дорого, если операционная система пробуждает все процессы, чтобы увидеть, какие из них затем возвращают accept (). Поскольку в Apache в режиме предварительной вилки может быть более 100 процессов, это может вызвать проблемы.

Итак, если у вас есть только один сокет слушателя и вы знаете, что только несколько процессов хотят выполнить вызов accept (), тогда вы, возможно, можете отказаться от перекрестного процесса принять мьютекс.

тогда это может быть довольно дорого, если операционная система пробуждает все процессы, чтобы увидеть, какие из них затем возвращают accept (). Поскольку в Apache в режиме предварительной вилки может быть более 100 процессов, это может вызвать проблемы.

Итак, если у вас есть только один сокет слушателя и вы знаете, что только несколько процессов хотят выполнить вызов accept (), тогда вы, возможно, можете отказаться от перекрестного процесса принять мьютекс.

16
ответ дан 30 November 2019 в 22:43
поделиться
Другие вопросы по тегам:

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