Рубрики
Uncategorized

Структура процесса Свула

Автор оригинала: David Wong.

1. Базовые знания о процессе

Что такое процесс? Так называемый процесс на самом деле является запущенной программой в операционной системе. Мы запускаем PHP-файл через PHP в терминале, что эквивалентно созданию процесса. Этот процесс будет находиться в системе, запрашивать собственные системные ресурсы пространства памяти и запускать соответствующие программы

Для процесса его основное содержимое разделено на две части, одна из которых-его память, которая выделяется из системы в начале создания процесса, и все созданные им переменные будут храниться в этой среде памяти

Одним из них является его контекстная среда. Мы знаем, что процесс выполняется в операционной системе. Для программы ее выполнение зависит от ресурсов и некоторых состояний операционной системы, назначенных ей операционной системой.

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

2, Структура процесса Свула

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

Во-первых, я представлю следующие процессы swool:

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

  1. Основной процесс: основной процесс
  2. Процесс менеджера: управление процессами
  3. Рабочий процесс: рабочий процесс
  4. Процесс задачи: асинхронный рабочий процесс задачи

1. Основной процесс

Первый слой, главный процесс, является основным процессом swool. Этот процесс управляется основными событиями, используемыми для обработки swool. В этом процессе вы можете видеть, что у него есть основной реактор [поток] и несколько реакторных [потоков], и весь мониторинг событий в swool будет реализован в этих потоках, таких как подключение от клиента, обработка сигналов и т. Д.

Каждая нить имеет свое собственное предназначение. Давайте узнаем больше о каждом потоке

Главный реактор (основная резьба)

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

Группа резьбовых соединений реактора

Поток реактора отвечает за поддержание TCP-соединения клиентской машины, обработку сетевого ввода-вывода и отправку и получение данных в асинхронном и неблокирующем режиме. После принятия нового соединения основной поток swool назначит соединение потоку с фиксированным реактором, прочитает данные, когда сокет будет доступен для чтения, выполнит анализ протокола и передаст запрос рабочему процессу. Отправьте данные клиенту TCP, когда сокет доступен для записи.

Поток проверки сердцебиения

После настройки обнаружения сердцебиения в swool поток пакетов сердцебиения подключит все предыдущие онлайн-соединения в пакете обнаружения отправки с фиксированным временем

Поток приема UDP (udprecv)

Получать и обрабатывать клиентские UDP-пакеты

2. Управление менеджером процессов

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

Swool создаст отдельный процесс управления при запуске. Все рабочие процессы и процессы задач относятся к развилке процессов управления. Процесс управления отслеживает события завершения всех подпроцессов. Когда в рабочем процессе возникает фатальная ошибка или завершается рабочий жизненный цикл, процесс управления повторяет процесс и создает новый процесс. Другими словами, процесс менеджера “няни” обладает всеми полномочиями для управления созданием и переработкой рабочих и рабочих процессов.

На другой диаграмме показана взаимосвязь между процессом менеджера и процессом работника/задачи.

3. Рабочий процесс

Рабочий процесс относится к основному логическому процессу swool. Пользователь обрабатывает серию запросов от клиента, принимает пакеты запросов, доставленные потоком реактора, выполняет функцию обратного вызова PHP для обработки данных, генерирует данные ответа и отправляет их потоку реактора. Данные ответа, отправленные потоком реактора клиенту TCP, могут быть в асинхронном режиме без блокировки или в режиме синхронной блокировки

4. Процесс выполнения задачи

Рабочий процесс задачи-это асинхронный рабочий процесс, предоставляемый swoope. Эти процессы в основном используются для обработки некоторых трудоемких синхронных задач, которые выполняются в рабочем процессе.

3, Просмотр процесса и сортировка процессов

При запуске приложения swool в общей сложности будет создано 2 + N + m процессов. 2-это основной процесс и процесс менеджера, где n – количество рабочих процессов. M-количество рабочих процессов задачи.

Если он не установлен по умолчанию, нижний уровень swool запустит соответствующее количество потоков реактора и рабочих процессов в соответствии с количеством ядер процессора текущей машины. Моя машина-это одно ядро. Рабочий-1.

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

После запуска сервера просмотрите текущий сгенерированный процесс в командной строке

В этих трех процессах корневой процесс всех процессов, то есть процесс 2123 в примере, является так называемым основным процессом; процесс 2212 является процессом менеджера; и последний процесс 2321 является рабочим процессом.

Взаимодействие между клиентом и сервером

1. Когда запрос клиента поступает в основной реактор, клиент фактически подключается к потоку реактора в главном процессе.

2. Главный реактор регистрирует запрос на соответствующий реактор в соответствии с ситуацией в реакторе (каждый реактор имеет epoll). Используется для отслеживания изменений клиентов)

3. Когда клиент меняется, реактор передает данные работнику для обработки

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

5. Реактор отправляет результат ответа на соответствующий запрос на подключение для обработки

Эскиз Карты:

Последующая подготовка

Эта статья посвящена некоторым знаниям, которые я почерпнул у Свула, и которые я разослал после предварительной сортировки. Я надеюсь, что смогу учиться вместе с вами. Если статьи недостаточно, вы можете обсудить и изучить ее вместе. Добро пожаловать, чтобы беспокоить меня. Позже я собираюсь начать с сетевой модели, чтобы лучше понять принцип реализации swoope и сравнить его с проблемами традиционного режима работы php -fpm. В предыдущей статье (1) о том, как реализовать сетевой сервер с блокировкой одного процесса, вы можете сначала понять, как постепенно превратиться в модель главного рабочего процесса с несколькими процессами.

Добро пожаловать, чтобы исправить статью~