Все в курсе что он и много других языков медленнее на порядки, и угадайте что? Мизерное количество сайтов написано на С++, даже высоконагруженные далеко не всегда написаны на нем.
Сомо собой разумеется. Я не спорю, что «порог входа» для С++ сильно выше, чем для PHP. Я так же не спорю с тем, что «стартануть» на PHP быстрее, причем намного. За все нужно платить. Вопрос лишь в осознании этой платы.
А если страничка на PHP генерируется не 100мс, а 10мс, то по моему ничего плохого здесь нет, или что вместо 300rps мы получаем 1000rps, минимально изменяя код, это же здорово, разве нет?
1000rps — это какая-то синтетика и вам это точно известно. Это изумительно, но это синтетика — это не рабочий проект. Я читал такие же статьи много лет назад. Совершенно фантастические приросты производительности. А толку? Для меня отправной точкой для того, чтобы закончить работу с ПХП, было понимание о наличие потолка производительности, который очень низок и который не пробить никакми оптимизаторами. Я говорю не про алгоритимческую сложность, а про сложность единицы. Для того, чтобы «внезапно» не получить даже 300rps вовсе не обязательно решать задачи на графы. Есть PHP, который медленнее C++ на порядки, а есть Go (компиляция+типизация), который медленнее только в разы. И вот учитывая скорость старта и порог вхождений, говорить про разы на мой взгляд разумно, а говорить про порядки — нет.
Если ваш проект эти проценты спасают, то это здорово. А вот некоторые люди могут стукнутся в непробиваемый потолок в тот самый момент, когда сил уже вложено необратимо много. То что вы в этот потолок еще не стукнулись — это либо ваше счастье, либо ваше горе. Смотря по сопутсвующим обстоятельствам. Однажды можно храбро бросится в новый переспективный проект и узнать про этот самый потолок много нового и интересного. Вот такой вот мой «очень дорогой» опыт. Незнаю много ли таких людей, но они есть. И для нас — это не «мифы» — это «факты».
Для кого вы писали статью? Для тех кто с радостью пишет на PHP? Судя по вступлению — нет. Вы хотели переубедить тех кто считает, что «PHP умирает». Вот он я — вот мои аргументы. Обвините меня в том, что я про ПХП ничего не знаю и что мои обвинения голословны. Вы можите? В ответ я получу еще несколько минусов, потому, что статья написана не для меня, а для тех кто «в клубе любителей». Тогда начните статью словами «Сегодня я расскажу вам пару трюков о том, как сделать PHP еще быстрее...».
Зря я сюда влез — вы уж простите. Но не могу я без боли смотреть на статьи про «производительность» PHP. Рука тянется к клавиатуре. Наверное единственный аспект, где я сдержаться не могу.
Говоря про «разы порядки» я имел ввиду, что ПХП очень медленный.
Если я на C++ ускорю обработку запросов на 20% — то это будет «Вау! Круто!». Потому, что речь может идти про тысячи запросов.
Если вы ускорите ПХП на 400%, то вам скажут «ммм… окей. А еще можно что-то ускорить? Было бы неплохо...». Но можно конечно и серверов навалить. Подход про «железо дешевле» я тоже слышал.
Или вы правда считаете, что магическим образом качественный переходу уже произошел? Давайте только говорить честно.
Плохой тормозной код можно написать на любом языке. Алгоритм O(n^2) отработает при больших n на C медленнее, чем O(n) для PHP — этого я оспраивать не будут. Но если мы возьмем код на С++, написанный алгоритмически вменяемым человеком, то даже если этот код не точили напильником, то он будет быстрее, чем заточенный до блеска код на PHP.
Поймите мою позицию правильно. Пусть PHP существует, но не стоит говорить о скорости, о том что все на самом деле быстро. Говорите про «низкий порог вхождения», «быстрый старт» и другие подобные плюсы. Если бы PHP был быстр, то нужны бы были статьи, которые «разрушают мифы»? Почему-то не видно статей, которые разрушают мифы о том, что C или C++ тормозной. Это повод задуматься.
Я боюсь ошибиться, но судя по датам это была версия 5 или выше, т.к. там уже были области видимости внутри класса.
Кстати вот интересный вопрос: разработчики PHP все еще считают, что «закрытый член класса» — это такой член, «о котором снаружи никто не знает» или они уже пришли к заключению о том, что это член класса, «к которому нельзя снаружи обратиться»?
Никогда этого не понимал. Понимаю привычку, но слепую веру — это глупо.
Для того, чтобы узнать язык, на нем нужно какое-то время писать. Судя по всему у вас переход из состяния «не знаю/знаю» произошел дискретно в момент, когда вы впервые увидели ПХП. Снимаю перед вами шляпу — я таких людей в своей жизни встречаю впервые.
видать вы давно трогали PHP. Вообще можете уточнить когда и с чем вы работали? У меня создается впечатление что это было лет так 5-6 назад
Абсолютно верно — я об этом написал. Это было давно. Те тенденции, которые я видел тогда (а так же исходная точка), позволяли сделать вывод, что принципиально ничего не изменится. Судя по всему так и есть, т.к. разговор в конечно счете снова про «разы», а не про «порядки». Ну а далее «интерпритатор, типизация, чудес не бывает» и всякое бла-бла-бла в этом роде. Не буду повторятся.
Я бы и перед реализацией на Rust/Go/C++ его ставил что бы не гонять постоянно CPU.
А я бы не стал, т.к. в Go вообще все операции асинхронные, а в C++ «нормальные пацаны» пишут все асинхрон.
Уже были попытки сделать из PHP тру fcgi но как-то это не популярная парадигма
Вы понимаете, когда люди придумали FCGI — это был не «прикол так». В этом был глубинный смысл: переход от CGI к FCGI. И сделано это было еще до ПХП. Я очень рад, если в ПХП наконец сделали возможность настоящего FCGI, т.к. плюсы от прогретого окружения могут перекрыть все остальные попытки «ускорения».
Походу это было еще до APC/OpCache…
Это было очень-очень давно.
К слову, приход в Фейсбук Александреску ничего для «этих ваших ПХП» хорошего не сулит. С учетом того, что весомый вклад в ПХП сделал именно ФБ, стоило бы задуматься.
Расскажите мне про это еще раз, когда «по всей видимости будет» " где-нибудь" — тогда будет смысл говорить. Всегда есть куча крутых идей в проэкте, но:
1) Они не всегда реализуются
2) Не всегда реализуются в том виде
3) Не всегда дают ожидаемый эффект
И «специфичных» задач на ПХП у меня нет. У меня нет никаких задач на ПХП уже очень давно. Я этому несказанно рад.
Статьи появляются чтобы развеять стереотипы, зря вы не верите.
Ожидаю еще ряд минусов, но справедливость требует написать еще один ответ.
Я отдал этому монстру несколько лет своей жизни. Я очень верил в этот язык, но чем больше я про него узнавал, тем меньше он мне нравился. В итоге это выродилось в лютую ненавист к этому языку (да — я признаю, что я эмоционален, когда речь идет о PHP).
Я прошел путь через разные оптимизаторы (которые ингода кстати глючат), узнал что перед ПХП нужно ставить реверс прокси, чтобы выхлоп не блокировал работу скрипта, ставил мемкешд, чтобы ликвидировать «узкое место при обращении к БД». Узнал что ПХП не умеет работать с FCGI так как это задумано. То есть там нельзя было создать цикл обработки (возможно сейчас это уже не так). Мы пробывали клеить автоматом файлы в один, чтобы получить прирость производительности. И еще кучу-кучу всяких мелочей, которые давали надежду получить еще немного прироста. В итоге мы получили сотни процентов прироста. А каков итог? Этого мало.
К сравнению выснилось, что сервер на С++, способен обработать запрос, сделать полезные вычисления и отправить ответ пользователю за то время, пока! пустой! скрипт на ПХП даже не успеет загрузиться.
Стереотипы? Да — я работал с ПХП давно, но у меня есть сильные опасения, что принципиально с того момента мало что изменилось. Многие разработчики прокляли тот момент, когда решили писать на ПХП, потому что менкеджер всех убедил, что «ну фейсбук и вк же написаны на ПХП», даже не подозревая как сильно тот ПХП, который они использовали отличался от того ПХП на которм они собирались писать и не понимая через какое количество «боли и унижения» пришлось пройти этим людям.
Скажу честно — для меня пост о том, что «ПХП не такой уж медленный» — это пост про то, что «БигМак не такой уже и вредный».
С завидной периодичностью появляются статьи про, что «ПХП не так уж плох» и «ПХП можно ускорить». Если бы все было так хорошо как пишут — такие статьи бы не появлялись. Короче: «Не верю!».
Есть фундаментальные органичения ПХП, которые обусловлены его устройством. Чудес не бывает. Его можно ускорить в 4 и даже в 10 раз, но относительно его «производительности», этого будет недостаточно — нужны порядки.
Все же практика показывает, что если без макроса можно обойтись, то без него нужно обойтись. По этой причине ценность макросов типа FOREVER, категорически сомнительна. Что такое while(true) знают все, а что такое FOREVER еще надо разбираться. Может там ракеты в космос запускают. Одно дело, когда макрос заменяет большую портянку и совсем другое, когда одно короткое слово заменяется на другое.
«Безопасный вызов» — это опять же очень спорный момент.
if (x) x->foo();
Ну и вполне себе нормально. Не слишком много лишнего. Вот если в коде таких вызовов много — может с кодом что-то не то?
Для меня ценными являются такие макросы (к вопросу про «превращение в строку»)
#define FOO(X) foo(#X, X)
Часто полезно при перечислении полей объекта для сериализации. Чтобы не ошибиться.
Не перечислены макросы, которые работают для старого и нового стандарта:
OVERRIDE, BOOST_AUTO, BOOST_FOREACH
Впрочем эти надеюсь скоро полностью уйдут в прошлое.
Замечание: Когда читал инструкцию, то прочитав 5-ый пункт, решил, что его можно выполнить и позже. Оказывается, что после модификации, отключить дисклеймер уже невозможно! Думаю надо более ясно отразить этот факт.
По первым ощущениям:
1) Камера не работает
2) Свайпы срабатывают не там, где они нарисованы в обучалке. Кажется, что перевернуты.
3) К WPA-PSK2 вайфаю вообще подключаться отказался (даже логин/пароля не спросил)
Общее ощущение, что ОС-то крутая, но работает на n9 кривовато. Посмотреть можно, но для пользования непригодна.
Надо ехать в финку за Jolla.
Попробуйте вопроизвести подобный пример в Java или C++.
Модифицирую ваш пример.
class Foo { private $bar = 'bar'; public $foo = 'foo'; } class Bar extends Foo {} $f = new Bar(); echo("Bar: "); var_dump($f->foo); var_dump($f->bar); $f = new Foo(); echo("Foo: "); var_dump($f->foo); var_dump($f->bar);Сомо собой разумеется. Я не спорю, что «порог входа» для С++ сильно выше, чем для PHP. Я так же не спорю с тем, что «стартануть» на PHP быстрее, причем намного. За все нужно платить. Вопрос лишь в осознании этой платы.
1000rps — это какая-то синтетика и вам это точно известно. Это изумительно, но это синтетика — это не рабочий проект. Я читал такие же статьи много лет назад. Совершенно фантастические приросты производительности. А толку? Для меня отправной точкой для того, чтобы закончить работу с ПХП, было понимание о наличие потолка производительности, который очень низок и который не пробить никакми оптимизаторами. Я говорю не про алгоритимческую сложность, а про сложность единицы. Для того, чтобы «внезапно» не получить даже 300rps вовсе не обязательно решать задачи на графы. Есть PHP, который медленнее C++ на порядки, а есть Go (компиляция+типизация), который медленнее только в разы. И вот учитывая скорость старта и порог вхождений, говорить про разы на мой взгляд разумно, а говорить про порядки — нет.
Если ваш проект эти проценты спасают, то это здорово. А вот некоторые люди могут стукнутся в непробиваемый потолок в тот самый момент, когда сил уже вложено необратимо много. То что вы в этот потолок еще не стукнулись — это либо ваше счастье, либо ваше горе. Смотря по сопутсвующим обстоятельствам. Однажды можно храбро бросится в новый переспективный проект и узнать про этот самый потолок много нового и интересного. Вот такой вот мой «очень дорогой» опыт. Незнаю много ли таких людей, но они есть. И для нас — это не «мифы» — это «факты».
Для кого вы писали статью? Для тех кто с радостью пишет на PHP? Судя по вступлению — нет. Вы хотели переубедить тех кто считает, что «PHP умирает». Вот он я — вот мои аргументы. Обвините меня в том, что я про ПХП ничего не знаю и что мои обвинения голословны. Вы можите? В ответ я получу еще несколько минусов, потому, что статья написана не для меня, а для тех кто «в клубе любителей». Тогда начните статью словами «Сегодня я расскажу вам пару трюков о том, как сделать PHP еще быстрее...».
Зря я сюда влез — вы уж простите. Но не могу я без боли смотреть на статьи про «производительность» PHP. Рука тянется к клавиатуре. Наверное единственный аспект, где я сдержаться не могу.
Если я на C++ ускорю обработку запросов на 20% — то это будет «Вау! Круто!». Потому, что речь может идти про тысячи запросов.
Если вы ускорите ПХП на 400%, то вам скажут «ммм… окей. А еще можно что-то ускорить? Было бы неплохо...». Но можно конечно и серверов навалить. Подход про «железо дешевле» я тоже слышал.
Или вы правда считаете, что магическим образом качественный переходу уже произошел? Давайте только говорить честно.
Плохой тормозной код можно написать на любом языке. Алгоритм O(n^2) отработает при больших n на C медленнее, чем O(n) для PHP — этого я оспраивать не будут. Но если мы возьмем код на С++, написанный алгоритмически вменяемым человеком, то даже если этот код не точили напильником, то он будет быстрее, чем заточенный до блеска код на PHP.
Поймите мою позицию правильно. Пусть PHP существует, но не стоит говорить о скорости, о том что все на самом деле быстро. Говорите про «низкий порог вхождения», «быстрый старт» и другие подобные плюсы. Если бы PHP был быстр, то нужны бы были статьи, которые «разрушают мифы»? Почему-то не видно статей, которые разрушают мифы о том, что C или C++ тормозной. Это повод задуматься.
Кстати вот интересный вопрос: разработчики PHP все еще считают, что «закрытый член класса» — это такой член, «о котором снаружи никто не знает» или они уже пришли к заключению о том, что это член класса, «к которому нельзя снаружи обратиться»?
Для того, чтобы узнать язык, на нем нужно какое-то время писать. Судя по всему у вас переход из состяния «не знаю/знаю» произошел дискретно в момент, когда вы впервые увидели ПХП. Снимаю перед вами шляпу — я таких людей в своей жизни встречаю впервые.
Абсолютно верно — я об этом написал. Это было давно. Те тенденции, которые я видел тогда (а так же исходная точка), позволяли сделать вывод, что принципиально ничего не изменится. Судя по всему так и есть, т.к. разговор в конечно счете снова про «разы», а не про «порядки». Ну а далее «интерпритатор, типизация, чудес не бывает» и всякое бла-бла-бла в этом роде. Не буду повторятся.
А я бы не стал, т.к. в Go вообще все операции асинхронные, а в C++ «нормальные пацаны» пишут все асинхрон.
Вы понимаете, когда люди придумали FCGI — это был не «прикол так». В этом был глубинный смысл: переход от CGI к FCGI. И сделано это было еще до ПХП. Я очень рад, если в ПХП наконец сделали возможность настоящего FCGI, т.к. плюсы от прогретого окружения могут перекрыть все остальные попытки «ускорения».
Это было очень-очень давно.
К слову, приход в Фейсбук Александреску ничего для «этих ваших ПХП» хорошего не сулит. С учетом того, что весомый вклад в ПХП сделал именно ФБ, стоило бы задуматься.
1) Они не всегда реализуются
2) Не всегда реализуются в том виде
3) Не всегда дают ожидаемый эффект
И «специфичных» задач на ПХП у меня нет. У меня нет никаких задач на ПХП уже очень давно. Я этому несказанно рад.
PHP — это интерпретируемый язык без строгой типизации. Вопросы?
Ожидаю еще ряд минусов, но справедливость требует написать еще один ответ.
Я отдал этому монстру несколько лет своей жизни. Я очень верил в этот язык, но чем больше я про него узнавал, тем меньше он мне нравился. В итоге это выродилось в лютую ненавист к этому языку (да — я признаю, что я эмоционален, когда речь идет о PHP).
Я прошел путь через разные оптимизаторы (которые ингода кстати глючат), узнал что перед ПХП нужно ставить реверс прокси, чтобы выхлоп не блокировал работу скрипта, ставил мемкешд, чтобы ликвидировать «узкое место при обращении к БД». Узнал что ПХП не умеет работать с FCGI так как это задумано. То есть там нельзя было создать цикл обработки (возможно сейчас это уже не так). Мы пробывали клеить автоматом файлы в один, чтобы получить прирость производительности. И еще кучу-кучу всяких мелочей, которые давали надежду получить еще немного прироста. В итоге мы получили сотни процентов прироста. А каков итог? Этого мало.
К сравнению выснилось, что сервер на С++, способен обработать запрос, сделать полезные вычисления и отправить ответ пользователю за то время, пока! пустой! скрипт на ПХП даже не успеет загрузиться.
Стереотипы? Да — я работал с ПХП давно, но у меня есть сильные опасения, что принципиально с того момента мало что изменилось. Многие разработчики прокляли тот момент, когда решили писать на ПХП, потому что менкеджер всех убедил, что «ну фейсбук и вк же написаны на ПХП», даже не подозревая как сильно тот ПХП, который они использовали отличался от того ПХП на которм они собирались писать и не понимая через какое количество «боли и унижения» пришлось пройти этим людям.
Скажу честно — для меня пост о том, что «ПХП не такой уж медленный» — это пост про то, что «БигМак не такой уже и вредный».
Есть фундаментальные органичения ПХП, которые обусловлены его устройством. Чудес не бывает. Его можно ускорить в 4 и даже в 10 раз, но относительно его «производительности», этого будет недостаточно — нужны порядки.
а где
barrier& operator=(const barrier &) = delete;
?
Все же практика показывает, что если без макроса можно обойтись, то без него нужно обойтись. По этой причине ценность макросов типа FOREVER, категорически сомнительна. Что такое while(true) знают все, а что такое FOREVER еще надо разбираться. Может там ракеты в космос запускают. Одно дело, когда макрос заменяет большую портянку и совсем другое, когда одно короткое слово заменяется на другое.
«Безопасный вызов» — это опять же очень спорный момент.
if (x) x->foo();
Ну и вполне себе нормально. Не слишком много лишнего. Вот если в коде таких вызовов много — может с кодом что-то не то?
Для меня ценными являются такие макросы (к вопросу про «превращение в строку»)
#define FOO(X) foo(#X, X)
Часто полезно при перечислении полей объекта для сериализации. Чтобы не ошибиться.
Не перечислены макросы, которые работают для старого и нового стандарта:
OVERRIDE, BOOST_AUTO, BOOST_FOREACH
Впрочем эти надеюсь скоро полностью уйдут в прошлое.
Замечание: Когда читал инструкцию, то прочитав 5-ый пункт, решил, что его можно выполнить и позже. Оказывается, что после модификации, отключить дисклеймер уже невозможно! Думаю надо более ясно отразить этот факт.
По первым ощущениям:
1) Камера не работает
2) Свайпы срабатывают не там, где они нарисованы в обучалке. Кажется, что перевернуты.
3) К WPA-PSK2 вайфаю вообще подключаться отказался (даже логин/пароля не спросил)
Общее ощущение, что ОС-то крутая, но работает на n9 кривовато. Посмотреть можно, но для пользования непригодна.
Надо ехать в финку за Jolla.