Какие тики используются в PHP?

Я хотел бы знать, почему, как и когда использовать тики в PHP:

declare(ticks=1); // A function called on each tick event function tick_handler() { echo "tick_handler() called\n"; } register_tick_function('tick_handler'); $a = 1; if ($a > 0) { $a += 2; print($a); } 

Solutions Collecting From Web of "Какие тики используются в PHP?"

Одно использование было описано rosen_ivanov@abv.bg :

Как уже отмечал Крис, тики не делают ваш сценарий многопоточным, но они по-прежнему велики. Я использую их в основном для профилирования – например, размещение следующего в самом начале скрипта позволяет отслеживать использование его памяти:

 <?php function profiler($return=false) { static $m=0; if ($return) return "$m bytes"; if (($mem=memory_get_usage())>$m) $m = $mem; } register_tick_function('profiler'); declare(ticks=1); /* Your code here */ echo profiler(true); ?> 

Этот подход более точен, чем вызов memory_get_usage только в конце скрипта. У этого есть некоторые издержки производительности, хотя 🙂

Другое использование было описано warhog@warhog.net :

как я читал о клещах в первый раз, когда я подумал «wtf, бесполезное дерьмо», – но затем я обнаружил какое-то полезное приложение …

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

 <?php function check_connection() { if (connection_aborted()) { // do something here, eg close database connections // (or use a shutdown function for this exit; } } register_tick_function("connection"); declare (ticks=20) { // put your PHP-Script here // you may increase/decrease the number of ticks } ?> 

Клещи можно использовать для основных вещей, таких как:

  1. Профилирование ваших скриптов
  2. Использование памяти монитора
  3. Подсчитать время выполнения
  4. Проверьте ресурсы, например, что соединение с базой данных в реальном времени

В PHP 4 вы можете использовать тики для реализации обработки ошибок, подобных исключениям.

Клещи можно использовать и для других вещей, например, для реализации приложения, управляемого событиями (например, игры).

Галочка – это событие, которое встречается для каждого N низкоуровневых операторов, выполняемых парсером в блоке declare . Значение для N указывается с помощью ticks=N в разделе директивы блоков объявлений.

Событие (события), которое происходит на каждом тике, определяется с помощью register_tick_function() .

Я нашел особенно интересный вариант использования тиков, не описанных здесь.

Я столкнулся с сценарием в моем демоне, где я хотел использовать pcntl_fork и убедиться, что это произошло именно тогда, когда я ожидал, но симптомы, которые показывают мне иначе. Проблема сводится к двум частям: (1) Как zend-ng (новый движок PHP7) сопоставляет выполнение C на основе ваших скомпилированных директив PHP, то есть между каждой группой исполнений мы имеем «тик» и (2) Как ресурсы подвергается вам в PHP, т.е. файловые дескрипторы создаются на O / S кодом C, который может быть или не быть в ожидаемом блоке выполнения при компиляции из вашего кода в C.

Говоря простыми словами, я открыл сокет в родительском процессе и в дочернем процессе использовал его, просто так? ну нет, ресурс в дочернем процессе не всегда был таким, как ожидалось, и во всех случаях родительский процесс не прерывался (что обычно объясняет, почему вы теряете доступ к открытым ресурсам)

Принуждение PHP объявлять, когда галочка выполняется после того, как один блок выполнения фактически заставил zend-ng быть немного менее эффективным и гарантировать, что мои блоки выполнения будут работать как ожидалось.