All streams
Search
Write a publication
Pull to refresh
69
0
Александр Календарев @akalend

Ламер с 20 летнем стажем

Send message
>поток pthreads жрёт ~4.6 Мб, но никак не 10.
зависит от настроек ядра, теоретически 4.6, но на практике более 10. Не спорил бы, если бы не решал многотрдовые задачи.
это можно использовать если нужно запустить один процесс, а если у тебя пятьдесят worker-ов?
согл с автором, это тема отдельной большой статьи,
и эту тему уже не раз раскрывали на Хабре
Задачи, кстати, могут быть не только сайтописательскими, а и носить прикладной характер, скажем, морфологическая обработка неких текстов или иных больших массивов данных, генерация статистической информации и так далее.


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

то же самое можно сказать и про морфологический разбор. Да и в онлайне он точно не нужен.

ну про большие наборы данных ты вообще загнул. Загнется пхп на их обсчет. Реальный случай в моей практике, обсчет биллинга: foeach просто не выдержал обхода нескольких миллионов. Пришлось делать цикл через while. Ну, это было лет пять назад, а теперь просто юзаем MapReduce

так что переходим к семафорам? расскажешь, как на практике надо использовать семафоры?
для задач парсинга есть multi_curl, который хорошо с этим справляется, В этих задача, основное время тратится на ожидание операций ввода/вывода, так что однопоточный режим режим именно самое то!

Сколько уже писали на эту мету, что асинхронный мультеплексорный режим лучше чем синхронный многотредовый, так как создание каждого треда требует дополнительных ресурсов, где-то по 10М на тред (это только pthreads, не считая сколько потребует пхпешный враппер) + системные ресурсы на переключение контента и прочее…

И в дополнение, в многопоточном режиме все равно в БД разными потоками не положишь.
Так что для решение таких задач самое то: запустить сразу несколько процессов с мултикурлом, парсить и класть в БД,

так что, про задачи вопрос не раскрыт.
Роскомнадзор прочитатет Хабр, создаст новый реестр и теперь будет банить еще и по IPv6
Товарища майора в соседнем купе еще ни кто не отменял,

Спасибо Вам за подсказку
function daemon()
{
        checkPid();
        $pid =  pcntl_fork();
 
        if ($pid < 0)
                die('error call fork()'.PHP_EOL);
 
        if ($pid)
                exit();
 
        echo 'start process pid=', posix_getpid(), PHP_EOL;
 
        $sid = posix_setsid();
        if ($sid < 0) exit;
 
        global $pidFilename;
        file_put_contents($pidFilename, posix_getpid());
 
        fclose(STDOUT);
        fclose(STDIN);
        fclose(STDERR);
}
[ offttop] Брать ведро попкорна?
Ну начнем с конца, с самого интересного. Объясни мне хоть одну задачу, реализованную средствами РНР с использованием тредов и желательно с примерами?
PS — а ты в курсе, что при использовании запросов в тредах — PHP сигфолтится?
тут нет ничего сложного,
я уже эти пользуюсь более пяти лет…
как правило, когда что-то отлаживаешь, то работаешь в консоли и видишь в ней всю отладку.
в этом случае, твой скрипт не делает форка, который его уводит в бэкграунд и работает функционал воркера.
как только надо либо продакшен, то ставим в запускающем скрипте опцию, которая запускает функцию demonize()
Эта функция состоит из форка, в котором завершается родительский процесс, отсоединяется терминал и гасятся стд выводы.

Если твой скрипт запускает несколько демонических процессов, то так правило — это однотипные воркеры, т.е. ты можешь отлаживаться на одном воркере. А в продакшене запустить хоть 32 (так у меня было в онлайн-игре).

Если твой скрипт запускает несколько демонов, но это разные по функциональности процессы, то что-то не то с архитектурой.

Еще раз напоминаю, что можно просто настроить вывод ошибок в суслог и при необходимости его тайлись:
tail -f /var/log/my_logs
это еще действует или все места уже расхватали?
Вообще-то я делаю, и это рекомендуется для всех, запуск приложения в двух режимах: демон или нет: разруливается опцией -d (daemon), запускается как php my_app -d в демоническом режиме

Так вот в демоническом режиме должен быть отсоединен терминал и выводы std занулены
Для отладки запускаем в отладочном режиме… Это нормальная практика, когда приложение имеет несколько режимов работы
1) суслог
2) перенаправляй все ошибки в лог
За обзор — спасибо, вполне доступно, правда все это давно всем известно, кто проработал на РНР более пары лет, а если и нет, то хорошо гуглится… Но, чтоб это все понять, прежде чем что-либо делать, советую прочитать про основы IPC у Стивенсона, где на примерах все хорошо рассказано и описано.

А вот для новичков, лучше все разобрать на пальцах: конкретные и реальные примеры. Так что, непонятно, на кого рассчитана статья.
Я являюсь разработчиком IM сервиса в своем проекте (проект имеет 25-30К одновременно открытых сессий).
Мы решили отказаться от XMPP в сторону более простого JSON для мобильных клиентов, и простой REST для всего остального.
Ответ Прост: ВК продвигают свой велосипед, тек же, как Гугли продвигают свой.
приятно уху Питерские места.

спасибо за материал и ссылку на библиотеку TREE
буду думать, как ее применить :)
каждому и бесплатно!!!
а статью писал-то не Костя
редис отстает возможность этих самых процедур
по описанию очень на Контакт похоже

Information

Rating
Does not participate
Location
Санкт-Петербург, Санкт-Петербург и область, Россия
Date of birth
Registered
Activity

Specialization

Software Architect, Database Architect
Lead
From 325,000 ₽
PostgreSQL
Golang
C++
Python
Database
Designing application architecture
Creating project architecture
Database design
Object-oriented design
Code Optimization