Выполнять скрипт php каждые 40 миллисекунд?

Есть какой-то способ выполнить php-скрипт каждые 40 миллисекунд? Я не знаю, подходит ли cronjob, потому что 25 раз в секунду требуется много CPU.

Ну, если php не правильный язык, какой язык я должен использовать?

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

Если вы попытаетесь вызвать скрипт PHP каждые 40 миллисекунд, это будет включать:

  • Создание процесса
  • Загрузить PHP
  • Загрузите и скомпилируйте скрипт
  • Запустить скомпилированный скрипт
  • Удалите процесс и всю память

Вам гораздо лучше помещать вашу работу в тело цикла, а затем использовать time_sleep_until в конце цикла, чтобы закончить оставшуюся часть ваших 40 миллисекунд. Затем запустите свою программу PHP один раз.

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

Каждые 40 миллисекунд будут впечатляющими. Это не очень подходит для cron , который работает с 1-минутной границей.

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

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

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

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

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

PHP – медленный, интерпретируемый язык. Для этого для открытия файла требуется почти такое количество времени. Выполнение скрипта PHP каждые 40 миллисекунд приведет к огромной очереди и сбою очень быстро. Это определенно похоже на задачу, для которой вы не хотите использовать PHP, но демон или другой быстрый, скомпилированный двоичный файл. Что вы хотите сделать?

Насколько я знаю, крона может выполняться только каждую минуту. Это наименьшее количество времени. Мне осталось интересно, почему вам нужно такое небольшое количество времени исполнения?

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

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

http://kevin.vanzonneveld.net/techblog/article/create_daemons_in_php/

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

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

Я не уверен, что каждые 40 MS реалистичны, если задняя задача должна иметь дело с вещами, такими как запросы к базе данных. Вероятно, вы бы лучше разработали способ адаптироваться к системным условиям и многократно пытались запускать N раз в секунду, а не каждые 40 MS, например, часы. Опять же, это зависит от сложности того, что вам нужно выполнить за занавеской.

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

  • В зависимости от версии PHP сбор мусора может быть нарушен. Если вы демоннизируете, вы рискуете пропустить память N раз в секунду.

  • Другие причины подробно описаны в этом ответе .

Попробуйте использовать C или Python и отслеживайте, сколько времени занимает каждая итерация. Это позволяет вам сделать «лучшее усилие» для запуска N раз в секунду или каждые 40 MS, в зависимости от того, что больше. Это позволяет избежать непрерывного функционирования вашего процесса, поскольку каждый раз, когда он заканчивается, его уже поздно, чтобы начать работу снова.

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

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