Александр Календарев @akalend
Ламер с 20 летнем стажем
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
зависит от настроек ядра, теоретически 4.6, но на практике более 10. Не спорил бы, если бы не решал многотрдовые задачи.
и эту тему уже не раз раскрывали на Хабре
генерация статистической информации — сам-то рассчитывал что либо? практически все статистические расчеты есть — обработка одного большого массива данных. Да, и для разного рода
извращенияанализа, типа кластерного, регрессионного и пр. есть хорошо отлаженные статичтические пакеты, и твоя работа состоит в том, чтоб суметь их прикрутить, так как что-либо рассчитать на пхп — смертеподобно.то же самое можно сказать и про морфологический разбор. Да и в онлайне он точно не нужен.
ну про большие наборы данных ты вообще загнул. Загнется пхп на их обсчет. Реальный случай в моей практике, обсчет биллинга: foeach просто не выдержал обхода нескольких миллионов. Пришлось делать цикл через while. Ну, это было лет пять назад, а теперь просто юзаем MapReduce
так что переходим к семафорам? расскажешь, как на практике надо использовать семафоры?
Сколько уже писали на эту мету, что асинхронный мультеплексорный режим лучше чем синхронный многотредовый, так как создание каждого треда требует дополнительных ресурсов, где-то по 10М на тред (это только pthreads, не считая сколько потребует пхпешный враппер) + системные ресурсы на переключение контента и прочее…
И в дополнение, в многопоточном режиме все равно в БД разными потоками не положишь.
Так что для решение таких задач самое то: запустить сразу несколько процессов с мултикурлом, парсить и класть в БД,
так что, про задачи вопрос не раскрыт.
Товарища майора в соседнем купе еще ни кто не отменял,
Спасибо Вам за подсказку
Ну начнем с конца, с самого интересного. Объясни мне хоть одну задачу, реализованную средствами РНР с использованием тредов и желательно с примерами?
PS — а ты в курсе, что при использовании запросов в тредах — PHP сигфолтится?
я уже эти пользуюсь более пяти лет…
как правило, когда что-то отлаживаешь, то работаешь в консоли и видишь в ней всю отладку.
в этом случае, твой скрипт не делает форка, который его уводит в бэкграунд и работает функционал воркера.
как только надо либо продакшен, то ставим в запускающем скрипте опцию, которая запускает функцию demonize()
Эта функция состоит из форка, в котором завершается родительский процесс, отсоединяется терминал и гасятся стд выводы.
Если твой скрипт запускает несколько демонических процессов, то так правило — это однотипные воркеры, т.е. ты можешь отлаживаться на одном воркере. А в продакшене запустить хоть 32 (так у меня было в онлайн-игре).
Если твой скрипт запускает несколько демонов, но это разные по функциональности процессы, то что-то не то с архитектурой.
Еще раз напоминаю, что можно просто настроить вывод ошибок в суслог и при необходимости его тайлись:
tail -f /var/log/my_logs
Так вот в демоническом режиме должен быть отсоединен терминал и выводы std занулены
Для отладки запускаем в отладочном режиме… Это нормальная практика, когда приложение имеет несколько режимов работы
2) перенаправляй все ошибки в лог
А вот для новичков, лучше все разобрать на пальцах: конкретные и реальные примеры. Так что, непонятно, на кого рассчитана статья.
Мы решили отказаться от XMPP в сторону более простого JSON для мобильных клиентов, и простой REST для всего остального.
спасибо за материал и ссылку на библиотеку TREE
буду думать, как ее применить :)