PHP асинхронность, многопоточность, параллельность

12 3
ArbNet
На сайте с 27.10.2019
Offline
126
1458

Кто-то делал что-то подобное? Есть желающие поэкспериментировать и разработать решение для использования в своих проектах?

Знаю есть несколько типа фреймворков для этого. Но у меня всегда возникает желание сделать по своему. Кому это интересно ?

Посмотрел я на те фреймворки, как обычно жуть-жуткая, статьи на эту тему, кто во что горазд как обычно и exec,  popen, proc_open, system, passthru, stream_select, curl, fibers.

Есть мысль сделать Loop на socket с  fibers, ещё может с  stream_select и  proc_open. У кого по этому поводу возникали какие либо мысли?

Обсуждение разработки на моём фреймворке https://discord.gg/23N4s9x2kp
Mik Foxi
На сайте с 02.03.2011
Offline
1079
#1
смотря что надо. я как-то костылил вывод запущенной команды в файл, при многопоточных парсингах, т.е цикл exec выполнялся мгновенно, а потом уже другим пхп процессом чекал что там получилось.
Антибот, антиспам, веб файрвол, защита от накрутки поведенческих: https://antibot.cloud/ + партнерка, до 40$ с продажи.
WS
На сайте с 01.11.2008
Offline
136
#2

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

foreach($массив_с_потоками as $thi=>$thv)
{
        $массив_с_потоками[$thi]['дескрипторпотока']=popen('php -f '.$thv['файлпотока'], 'r');
}
foreach($массив_с_потоками as $thi=>$thv)
{
        if(stream_get_contents($массив_с_потоками[$thi]['дескрипторпотока'])=='всё нормально')
        {
                //...обрабатываем результат от потока $thi, который поток $thi, например записал в файл на рам диске;  
        }
}

ArbNet
На сайте с 27.10.2019
Offline
126
#3
Владимир #:
если вы хотите сделать универсальное решение

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

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

WS
На сайте с 01.11.2008
Offline
136
#4
ArbNet #:

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

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

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

ArbNet
На сайте с 27.10.2019
Offline
126
#5
Владимир #:
потоки можно запустить и без него, я бы не тратил ресурсы сервера на демона

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

WS
На сайте с 01.11.2008
Offline
136
#6

для этого, вроде уже есть memcache и shared mеmory https://www.php.net/manual/en/shmop.examples-basic.php, хотя вот для shared mеmory удобная и простая обёртка бы не помешала

UPD:  на phpclasses уже кто-то создал и выложил такую обёртку https://www.phpclasses.org/package/4994-PHP-Store-and-retrieve-information-in-shared-memory.html

Richard Keizer
  • Richard Keizer
  • www.phpclasses.org
This class can be used to store and retrieve information in shared memory. It can open a shared memory segment with a given key and store any data in this memory and read from it. The class can also retrieve the value...
lealhost
На сайте с 07.06.2014
Offline
136
#7

Пожалуй, все что надо:

https://www.php.net/manual/en/book.pthreads.php

ArbNet
На сайте с 27.10.2019
Offline
126
#8
lealhost #:
Пожалуй, все что надо:

Модуль считается неподдерживаемым и мёртвым.

ЗЫ. Не очень хочется использовать, то что может перестать работать.

W1
На сайте с 22.01.2021
Offline
293
#9
Короче, сначала надо понять, что требуется: многопоточность или кеширование.
И не валить всё в одну кучу.
Мой форум - https://webinfo.guru –Там я всегда на связи
LEOnidUKG
На сайте с 25.11.2006
Offline
1731
#10
выполняется допустим чтение из базы одних и тех же данных

БД создана для того, чтобы с неё было чтение данных. Всякие InnoDB и правильные настройки позволяют в память запоминать данные, чтобы быстро их оттуда доставать.

А вот уже структуру таблиц и запросы, вытекающие из них, должен делать разработчик. И вот тут у нас просто пропасть. Т.к. многие считают, что НЕЛЬЗЯ делать много простых запросов. Лучше 1 запрос с 15 JOIN, это наверное показывает их умение или тешит самолюбие, а потом "Ой что-то у нас тормозит сайт". 

PHP асинхронность, многопоточность, параллельность

Сначала бы понять для чего все эти слова?

Асинхронность в коде? Увольте. Лучше сделать микродемонов, чтобы выполняли задачи по крону.

Многопоточность? Для чего? ОС и так распределяет задачи по ядрам. Каждому вызову выделяется свои потоки, так же как каждый запрос в БД использует свободно ядро. 

Параллельность? Для чего?

Если автор задумал, что: "ВАУ! Я сейчас всё это реализую, а тупые разработчики НИКТО не хочет это делать из популярных CMS". Забывает 1 вещь, что за всё надо платить.

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

✅ Мой Телеграм канал по SEO, оптимизации сайтов и серверов: https://t.me/leonidukgLIVE ✅ Качественное и рабочее размещение SEO статей СНГ и Бурж: https://getmanylinks.ru/
12 3

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий