Pull to refresh

Comments 16

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

Так как используете popen, то это вовсе не триды (thread), а отдельные процессы (fork). Очень уж оно ресурсоемкое, хотя для ряда задач и может быть оправдано, например, для каких-либо грабберов-парсеров, запускаемых с командной строки.

А вообще отличная реализация, кстати можно было бы не только файловую систему использовать, но и shared memory, или memcached — по ситуации.
Хорошо, спасибо за совет. Я попробую доработать систему с испльзованием SharedMemory.

По сути Вы правы, это не триды, а форки. Но реализация такова, что эти форки управляются как триды. Была задача реализовать именно так. Но всеравно спасибо за совет, поправлю.

Хотя у меня есть и минус в сторону Shared Memory — для того, что бы ее использовать нужно скомпилировать ПХП с параметром -smop, что недопустимо в моей ситуации.

Моя основная задача была разработать систему проверки ссылок. Причем эта система должна была отрабатывать максимально быстро и запускаться как страница. То есть при заходе клиента из браузера на страницу ему должно было вывестись сообщение с просьбой об ожидании и в это время начиналась проверка ссылок. Естественно, в один поток это очень долго. Для этого нужно использовать много потоко (триды, форки). Но так как PCNTL невозможен в условиях mod_php пришлось делать так как есть. Хостинг я использую чужой, что не позволяет мне попросить админов перекомпилировать пхп со всеми нужным мне параметрами.

В итоге мы имеем систему с минимальными требованиями к модулям.
>Моя основная задача была разработать систему проверки ссылок. Причем эта система должна была отрабатывать максимально быстро и запускаться как страница.

А разве curl_multi_* не лучше использовать в данном случае?
php.net/manual/ru/function.curl-multi-exec.php
Поверьте, вы неправы. Невозможно использовать curl_multi.

Как бы Вам объяснить… Просто загрузить данные по ссылкам в несколько потоков — недостаточно…
Нам надо помимо всего еще и, допустим, записывать данные в БД или выбирать по хоу выполнения какие-либо действия.

В любом случае курл_мульти_экзек — делает несколько запросов курла одновременно. Но нам то это и как раз не нужно! Нша задача — реализовать много потоков, выполняющих, возможно, даже, разный код!

В любом случае Ваше решение здесь неприемлимо.

Если бы надо было просто загрузить несколько ссылок или скачать файл многопоточно — Ваше предложение очень даже к месту было бы, но сейчас оно не подходит.
а почему именно UNIX? в реализации нет ничего, относящегося именно к юниксу, кроме путей (которые можно вынести в конфиги или константы)
Полностью согласен, на за Windows я уже очень давно (с года 99 ) нормально не сидел (только если в инет зайти, не больше ). И, поэтому, я без понятия как там теперь с правами пользователей, можно ли создать темповой директори и где ее найти… Если подскажите, то я доделаю и под Windows, разумеется, с автоопределением ОСи.
временную директорию можно создать где угодно, например: 'C:\Temp'.
с правами пользователей в винде даже полегче, в большинстве случаев, думаю, создать и считать файл будет не проблема.
хорошо, тогда внесу изменения. Думаю, уже это все в своем блоге изменю…
И вот если Windows Server? Там как??
Если мы клиенты Windows-хостинга?

Тогда, думаю, надо сделать возможность указать где должна находиться темповая директория…
Смотря для каких целей нужен Threading, если для работы с сокетами, то можно использовать curl_multi_exec, на vingrad.ru где то год назад поднималась эта тема, и есть готовое решение Google Code — Downloader

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

И спасибо всем за карму. Перенес топик в блог PHP.
С вашим решением одна проблема — запуск интерпретатора PHP — дорогостоящая операция.
Полностью согласен. Ваше решение на PCNTL намного менее требовательно в ресурсах машины, но оно требует запуска из консоли. Тут такая ситуация, что решить эту проблему однозначно невозможно. И это минус языка, к моему сожалению.
Sign up to leave a comment.

Articles