AzaThread гибко настраивается под любые ваши задачи. Есть два статических параметра, влиящих на все потоки и много параметров влияющих на каждый конкретный поток.
Стандартный способ задавать настройки - переопределить свойство класса:
class ExampleThread extends Thread
{
protected $prefork = false; // Выключаем предварительную инициализацию
function process()
{
// ...
}
}Второй вариант - передача настроек массивом. Этот способ предназначен для замыканий, но может использоваться и с обычными классами.
$thread = SimpleThread::create(function() {
// ...
}, array(
'timeoutMasterResultWait' => 15, // Устанавливаем таймаут на ожидание результата в 15 секунд
));$thread = new ExampleThread(null, null, null, array(
'timeoutMasterResultWait' => 15, // Устанавливаем таймаут на ожидание результата в 15 секунд
));Большинство опций никак не проверяются в процессе работы потока, поэтому изменять значения свойств после создания инстанса потока не имеет смысла.
Значение по умолчанию - true.
Флаг. Включает ожидание потоком следующих задач. Если отключено, то после выполнения одной задачи дочерний процесс умирает.
Потоки с предварительной инициализацией ($prefork = true) всегда многозадачны.
Значение по умолчанию - true.
Флаг. Включает в родительском процессе ожидание всех POSIX сигналов. SIGCHLD ожидается в любом случае - этот сигнал необходим для нормального функционирования.
Подробнее про обработку полученных как родительским, так и дочерним процессом сигналов можно прочитать в соответствующей части документации.
Значение по умолчанию - true.
Флаг. Включает предварительную инициализацию "потока". Дочерний процесс ответвляется сразу во время создания инстанса. Это позволяет проводить инициализацию более эффективно (особенно в пулах).
Потоки с предварительной инициализацией всегда многозадачны.
Значение по умолчанию - false.
Флаг. Включает принудительной ожидание предварительной инициализации. Это позволяет не делать один вызов метода wait перед запуском задач, но при этом убирает весь выйгрыш эффективности от предварительной инициализации. Так что не рекоммендуется к использованию.
Значение по умолчанию - false.
Флаг. Включает маппинг аргументов в метод process. Что позволяет получать аргументы не через getParam/getParams, а как в обычной функции:
class ExampleThread extends Thread
{
protected $argumentsMapping = true;
function process($arg1, $arg2)
{
echo $arg1; // 12
echo $arg2; // 79
}
}
$thread = new ExampleThread();
$thread->wait()->run(12, 79);Это слегка замедляет работу и поэтому отключено по умолчанию.
Значение по умолчанию - 3.
Таймаут. Устанавливает максимальное время ожидания инициализации дочернего процесса в секундах (может иметь дробное значение).
Установите в отрицательное значение (-1), чтобы отключить.
Значение по умолчанию - 5.
Таймаут. Устанавливает максимальное время ожидания результата в родительском процессе в секундах (может иметь дробное значение).
Установите в отрицательное значение (-1), чтобы отключить.
Значение по умолчанию - 600.
Таймаут. Устанавливает максимальное время ожидания новой задачи в дочернем процессе в секундах (может иметь дробное значение). Если за это время новая задача не будет получена, то дочерний процесс умирает.
Установите в отрицательное значение (-1), чтобы отключить.
Значение по умолчанию - 5.
Интервал. Устанавливает интервал в секундах (может иметь дробное значение), по истечении которого дочерний процесс проверяет, что родительский процесс жив. Если проверка неуспешна, то дочерний процесс умирает.
Не может быть отключен. При некорректном значении будет использоваться значение по умолчанию.
Режим сериализации данных для передачи между процессами. По умолчанию используется стандартная сериализация php. Если доступно расширение igbinary, то автоматически используется оно. Не рекоммендуется менять значение вручную.
Флаг доступности полноценного режима работы. Автоматически выставляется в true, если доступны все зависимости. Если выставлен в false, то "потоки" используют синхронный режим совместимости. Вы можете включить его специально, если необходимо тестирования функционала в упрощенном синхронном режиме без разветвления.