Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: C++ в сайтростроении

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (2): [1] 2 »   

> Описание: Плюсы и минусы использования С++ вместо PHP
ALEN Модератор
Отправлено: 09 Июля, 2011 - 21:35:22
Post Id



Участник


Покинул форум
Сообщений всего: 1459
Дата рег-ции: Авг. 2008  
Откуда: Крым


Помог: 11 раз(а)




Я не буду рассказывать значимость знаний С++ языка в настоящее время, а просто хочу сразу перейти к вопросу, чем хорош или плох в использовании С++ при создании интернет проектов. В основном буду прибегать в сравнении с PHP языком, который является основным лидером среди используемых языков в создании сайтов.

Решил начать с минусов:
1) Код необходимо компилировать для работы, в отличии от PHP. Данный минус не позволяет быстро править код программы.
2) C++ изначально не является шаблонизатором
3) Код программы занимает значительно больше места, чем аналогичная программа на PHP (Не всегда, но часто)
4) Генерация страницы иногда происходит дольше чем генерация страницы на PHP.

Плюсы:
1) Несмотря на то, что требуется компилировать код программы - это позволяет несколько обезопасить себя от внедрения вредоносных участков кода со стороны злоумышленниками.
2) -
3) -
4) Если ваш язык программирования интерпретатор(PHP) или компилятор для загрузки, каждый раз он выполняет соответственно компиляцию или интерпретацию кода, то при обращении к коду процедура будет занимать определенные ресурсы и время каждый раз. А при использовании С++ все накладные расходы на обработку, библиотеки и т.д. система может сохранять в кэш памяти, что значительно сократит нагрузку на ресурсы и скорость работы сценария.

Это основные моменты которые смог сразу для себя определить.

Хочу сделать небольшие выводы и рассказать, как я вообще пришел к использованию С++ в интернет проектах.


Совсем недавно ко мне обратились с просьбой создания хорошего и интересного проекта, который сможет выдерживать значительные нагрузки и легко справляться с ними. За помощью я обратился к братьям по цеху, которые занимаются разработкой в одних из крупных проектов. После длительных диалогов, тестов и фактов, я на личном опыте убедился, что хороший проект не может быть написан с использованием одного языка. Приходится учитывать многие особенности каждого языка, его плюсы и минусы. Выбирать для каждого модуля (части целой программы) отдельную технологию, которая может максимально подходить для реализации задачи. Таким образом я пришел к изучению С++ . Раньше даже смотрел примеры с написанием визуальных-прикладных программ написанных на PHP, но всему свое место.

Выводы:
- Если у вас простой сайт и он не требует больших нагрузок, то можно обойтись только PHP - тем более, что он специально разрабатывался для этих целей.
- Но не нужно забывать про другие языки программирования, таких как С++, C, PERL, Python, .NET и другие. С++ можно активно применять в создании: голосований, учетов различной статистики, чатах и других частях программ, которые требует частых обращений и могут значительно нагружать систему.

P.S. C++ выбрал за популярность, широту применения.

P.P.S. Думаю я более менее смог хоть на малую долю объяснить, что в web программировании языки отличные от PHP - не настолько бесполезны по сравнению с PHP. Буду рад, если кто поможет дополнить рассказ со своей колокольни.


Если кто еще не знает, что такое С++ или CGI :
CGI
C++

Хорошая статья: CGI для программиста

Полезные библиотеки для работы с CGI в С++:
http://www[dot]boutell[dot]com/cgic/ - тут еще много полезных библиотек, которые точно понадобятся, например GD - использование аналогично PHP.
http://eekim[dot]com/software/cgihtml/
(думаю есть еще аналоги, но такие вещи значительно облегчат работу)
 
 Top
White
Отправлено: 09 Июля, 2011 - 22:26:04
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 830
Дата рег-ции: Июнь 2011  
Откуда: Днепропетровск


Помог: 28 раз(а)




пара вопросов:
1. как насчет многозадачности, отсутствуещей в php и в принципе возможность применения ее в веб технологиях на c++
2. одним из плюсов я так понимаю является использование одной из наиболее прогрессивной системы работы с памятью в с++, по сравнению с php, но так ли это необходимо в веб разработках?
3. так как программа на с++ уже скомпилирована, то ее можно спокойно относить к закрытому исходному коду, что иногда большой плюс(в production), но в разработке наверняка напрягает необходимость каждый раз перекомпилировать код. Нельзя ли встроить компилятор c++ как модуль к серверу, чтобы переложить эту обязанность на него хотя бы на время разработки?


-----
if(time()>1356048000) die();
 
 Top
ALEN Модератор
Отправлено: 09 Июля, 2011 - 22:44:30
Post Id



Участник


Покинул форум
Сообщений всего: 1459
Дата рег-ции: Авг. 2008  
Откуда: Крым


Помог: 11 раз(а)




White
1) Если имелось в виду многопоточность, то в С++ она существует, я правда еще не задавался такой целью, но думаю в будущем решу вопрос и поведаю, что вышло. А вообще читал, что используется:
WIN - CreateThread и _beginthread(ex)
*nix - _beginthread(ex)
Но все это используется в визуальных приложениях точно, а вот под консолью (CGI) - я не уверен, потом попробую найти какую-то информацию (самому стало интересно).

2) Весь вопрос в том, какая цель и задача стоит перед разработчиком. Если мы пишем чат и каждую секунду к одним и тем же библиотекам и т.д. обращаются пользователи, то естественно С++ при правильном подходе даст желаемый результат, в отличии к примеру от PHP. Если у нас "цель" - простой сайт визитка с небольшой нагрузкой, то не вижу смысла использовать, что-то кроме PHP - под которым построить будет быстрее и удобней приложение.

3) Действительно код выходит закрытым в отличии даже от PERL. Я не слышал про компиляцию с помощью CGI. Да и сомневаюсь, что правильно весь проект засовывать в один cgi файл - лучше разбить модульно на части, что и облегчит разработку и в дальнейшем будут независимые модули, которые легче будет заменять и усовершенствовать чем целую программу сразу. Например система голосования в один файл, учет посещений в другой и т.д. - по времени вряд ли будет настолько огромный код, что будет "напрягать" при компиляции.
 
 Top
White
Отправлено: 10 Июля, 2011 - 08:39:10
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 830
Дата рег-ции: Июнь 2011  
Откуда: Днепропетровск


Помог: 28 раз(а)




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

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

3) понимаю, но сколько времени у вас отняла перекомпиляция каждого модуля при необходимости внесения малейших изменений, не сильно ли вас это напрягало?


-----
if(time()>1356048000) die();
 
 Top
ALEN Модератор
Отправлено: 10 Июля, 2011 - 10:19:27
Post Id



Участник


Покинул форум
Сообщений всего: 1459
Дата рег-ции: Авг. 2008  
Откуда: Крым


Помог: 11 раз(а)




White
1) Что такое многозадачность? Многопоточность - это способность параллельно запускать несколько задач. Все упирается в большей степени в права запуска в CGI. Я не уверен, что вышеупомянутые функции можно запускать из под CGI - в будущем проведу эксперименты и если все выйдет, тогда опубликую отдельный топик.

2) ПО поводу чата, да действительно это более серьезный обработчик, поэтому использования С++ будет более уместно нежели PHP, попробую объяснить на пальцах.
При работе PHP:
При написании топика или проверки новых сообщений, PHP каждый раз загружает и интерпретирует все используемые библиотеки, классы, функции и т.д. Таким образом одни и теже элементы одновременно в системе занимают несколько пространств.
При использовании C++
Все библиотеки и т.д. остаются в памяти один раз, что дает возможность обращаться к ним быстрее чем из диска + код уже компилирован и не нуждается в обработке и интерпретации.

3) Если код большой, то первая компиляция проходит с небольшой задержкой. Дальше если просто править сам код и не добавлять библиотеки компиляция проходит значительно быстрей и ее бывает даже не замечаешь, т.е. выходит, что я жму Ctrl+F5 вместо Ctrl+S ,но весь плюс работы на C++ - его не скомпилируешь с ошибками, php ты заливаешь и уже по ходу дела находишь и исправляешь ошибки.
Итого при хорошем знании обеих языков время создания одного и того же приложения будет не сильно отличатся.

Еще раз хочу отметить, что идеальное решение это использовать связки языков, а не заменять PHP на тот же C++ .
 
 Top
White
Отправлено: 10 Июля, 2011 - 13:19:16
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 830
Дата рег-ции: Июнь 2011  
Откуда: Днепропетровск


Помог: 28 раз(а)




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

ALEN пишет:
Все библиотеки и т.д. остаются в памяти один раз, что дает возможность обращаться к ним быстрее чем из диска + код уже компилирован и не нуждается в обработке и интерпретаци

Правильно ли я вас понял, что вызванная один раз программа на c++ остается в памяти сервера, а не выгружается из нее после окончания обработки определенных данных, так как это делает любая php программа? Если да, это во многом меняет суть дела, и делает неактуальным многое сказанное мной, но возникает закономерный вопрос о способах обмена данными между ней и клиентом.

ALEN пишет:
Еще раз хочу отметить, что идеальное решение это использовать связки языков, а не заменять PHP на тот же C++ .

именно это я и хочу понять, в чем принципиальное отличие этих языков именно в веб-програмировании

P.S. На самом деле довольно интересная тема, хотелось бы увидеть что-нибудь в примерах, думаю стало бы понятней


-----
if(time()>1356048000) die();
 
 Top
ALEN Модератор
Отправлено: 10 Июля, 2011 - 14:17:59
Post Id



Участник


Покинул форум
Сообщений всего: 1459
Дата рег-ции: Авг. 2008  
Откуда: Крым


Помог: 11 раз(а)




White пишет:
в том что поток в процессе работы может получать новые данные и обрабатывать их(оставаясь в памяти), задача же выполняется над исходными данными один раз

Если такой подход, то поток может обеспечиваться только на стороне сервера. а не CGI. А С++ в данном случае может служить только инструментом для запуска этого потока.


White пишет:
вызванная один раз программа на c++ остается в памяти сервера, а не выгружается из нее после окончания обработки определенных данных, так как это делает любая php

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

ALEN пишет:
именно это я и хочу понять, в чем принципиальное отличие этих языков именно в веб-програмировании

C++ - не является шаблонизатором и на нем не так удобно делать вставки из того же html
PHP - идет как шаблонизатор и изначально задуман для создания web проектов.

Преимущество С++ перед PHP есть только при создании приложений требующих большую нагрузку на сервер. В простых сайтах не вижу смысла использования С++ вместо PHP.
 
 Top
Мелкий Супермодератор
Отправлено: 10 Июля, 2011 - 16:22:00
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




White пишет:
Правильно ли я вас понял, что вызванная один раз программа на c++ остается в памяти сервера, а не выгружается из нее после окончания обработки определенных данных, так как это делает любая php программа?

А сам php так же не выгружается.
Суть какая - PHP, будучи написанным на С (или плюсах, не помню точно), можно подключить как FastCGI, при этом он не выгружается из памяти (впрочем, это не слишком давно было сделано, раньше - не выгружался только будучи модулем апача). А при обращении к себе - уже обрабатывает скрипт.
Но нам ничто не мешает сделать самим fastCGI, вкомпилив в него необходимый нам обработчик, убрав тем самым одного посредника.


-----
PostgreSQL DBA
 
 Top
ALEN Модератор
Отправлено: 10 Июля, 2011 - 16:51:04
Post Id



Участник


Покинул форум
Сообщений всего: 1459
Дата рег-ции: Авг. 2008  
Откуда: Крым


Помог: 11 раз(а)




Мелкий
Действительно это так, но не нужно забывать, что есть еще время затраченное на интерпретацию кода. В то время когда скомпилированный код сразу преобразуется в машинный и потому скорость работы выше.
Так же не буду спорить, что сравнительно недавно в PHP появилась возможность сразу интерпретировать код в машинный, но тем не менее С++ остается по факту более быстрым в частных решениях.
 
 Top
Мелкий Супермодератор
Отправлено: 10 Июля, 2011 - 17:50:13
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




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

Скорее, на компиляцию. PHP - интерпретатор компилирующего типа, всё же.
Но под "обрабатывает скрипт" я и имел в виду весь жизненный путь скрипта, от сборки и разбора пришедших параметров, до выгрузки скрипта и освобождения всех с ним связанных ресурсов. ммм, да, согласен, не дописал эту мысль.


-----
PostgreSQL DBA
 
 Top
White
Отправлено: 10 Июля, 2011 - 18:50:22
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 830
Дата рег-ции: Июнь 2011  
Откуда: Днепропетровск


Помог: 28 раз(а)




Мелкий пишет:
А сам php так же не выгружается.
Суть какая - PHP, будучи написанным на С (или плюсах, не помню точно), можно подключить как FastCGI, при этом он не выгружается из памяти (впрочем, это не слишком давно было сделано, раньше - не выгружался только будучи модулем апача). А при обращении к себе - уже обрабатывает скрипт.

я имею ввиду не сам php а программу(скрипт) написанный на нем, ведь
Мелкий пишет:
Но под "обрабатывает скрипт" я и имел в виду весь жизненный путь скрипта, от сборки и разбора пришедших параметров, до выгрузки скрипта и освобождения всех с ним связанных ресурсов.

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

это целесообразно в случае использования тех самых библиотек (которые не загружаются в память ядром ОС), а значит скорее всего в больших проектах(впрочем вы сами об этом говорите), но что мешает написать эти библиотеки в качестве модулей php и держать их постоянно в памяти?


-----
if(time()>1356048000) die();
 
 Top
ALEN Модератор
Отправлено: 10 Июля, 2011 - 21:08:20
Post Id



Участник


Покинул форум
Сообщений всего: 1459
Дата рег-ции: Авг. 2008  
Откуда: Крым


Помог: 11 раз(а)




White пишет:
эти библиотеки в качестве модулей php

1) Можно написать и модуль
2) Но есть моменты, когда нет доступа к самому серверу, но есть возможность использовать CGI.
 
 Top
White
Отправлено: 10 Июля, 2011 - 22:13:12
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 830
Дата рег-ции: Июнь 2011  
Откуда: Днепропетровск


Помог: 28 раз(а)




ALEN пишет:
2) Но есть моменты, когда нет доступа к самому серверу, но есть возможность использовать CGI.

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


-----
if(time()>1356048000) die();
 
 Top
DlTA
Отправлено: 11 Июля, 2011 - 00:26:23
Post Id



Постоянный участник


Покинул форум
Сообщений всего: 2952
Дата рег-ции: Окт. 2010  


Помог: 53 раз(а)




ALEN и т.д.
вы забыли одну маленькую вещь, "стоимость времени"
история показывает, что процессорное время дешевеет, а вот стоимость времени разработчика все дороже и дороже. посему тратить уйму времени на километры сишного кода (как по мне) неразумно, уж если хоца снизить нагрузку то скорее нужно обратить внимание качество кода.
 
 Top
White
Отправлено: 11 Июля, 2011 - 08:18:07
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 830
Дата рег-ции: Июнь 2011  
Откуда: Днепропетровск


Помог: 28 раз(а)




DlTA
Вы конечно абсолютно правы, но есть задачи с которыми php довольно плохо справляется и которые тем не менее могут перед вами стать, ИМХО. Именно о них и идет речь.

(Отредактировано автором: 11 Июля, 2011 - 08:18:31)



-----
if(time()>1356048000) die();
 
 Top
Страниц (2): [1] 2 »
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Программирование на C++ »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB