Поддерживает ли PHP асинхронное программирование? - PullRequest
1 голос
/ 15 ноября 2009

Я новичок в PHP. Я знаком с ASP.NET, которые поддерживают асинхронное программирование. То есть, если один запрос должен выполнить некоторую работу ввода-вывода. Предлагается программировать веб-страницу способом BeginProcess / EndProcess. Асинхронное программирование является ключом к улучшению масштабируемости.

Мне интересно, есть ли в мире PHP аналог асинхронного программирования (BeginXXXX / EndXXXX).

Ответы [ 6 ]

1 голос
/ 15 ноября 2009

Если ввод-вывод выполняется с сокетами или файлами, вы должны использовать stream_socket_select () или stream_select () соответственно (аналогично системным вызовам в C / C ++).

Вот простой урок по командной строке, сделанный на PHP: Простой терминальный чат на основе сокетов PHP

Примечание. Это не общее многопоточное решение, а простое решение для ситуаций, когда вам необходим "полупараллельный" ввод / вывод

1 голос
/ 15 ноября 2009

В .NET BeginXXX / EndXXX парадигма в значительной степени опирается на многопоточность, в то время как на PHP я не уверен, что вы могли бы даже начать новый поток (за исключением, может быть, пакета PECL ).

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

0 голосов
/ 22 февраля 2012

Используя stream_select, вы можете создавать дочерние процессы через HTTP-запрос. Проверьте код в http://drupal.org/project/httprl для некоторых идей о том, как это сделать. Я планирую перенести эту библиотеку на github, как только получу ее более отточенную; что-то, что можно запустить за пределами друпала. Но пока он живет на земле Друпала.

0 голосов
/ 15 ноября 2009

PHP не делает, но вы можете использовать AJAX после загрузки страницы, что позволит выполнять асинхронные запросы.

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

0 голосов
/ 15 ноября 2009

Вот интересная ссылка на тему мультиплексирования PHP с примерами PHP4 и PHP5:

http://netevil.org/blog/2005/may/guru-multiplexing

0 голосов
/ 15 ноября 2009

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

http://www.php.net/manual/en/book.pcntl.php

http://www.php.net/manual/en/pcntl.example.php

...