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
Форумы портала PHP.SU :: Версия для печати :: C++ в сайтростроении
Форумы портала PHP.SU » » Программирование на C++ » C++ в сайтростроении

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

1. ALEN - 09 Июля, 2011 - 21:35:22 - перейти к сообщению
Я не буду рассказывать значимость знаний С++ языка в настоящее время, а просто хочу сразу перейти к вопросу, чем хорош или плох в использовании С++ при создании интернет проектов. В основном буду прибегать в сравнении с 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/
(думаю есть еще аналоги, но такие вещи значительно облегчат работу)
2. White - 09 Июля, 2011 - 22:26:04 - перейти к сообщению
пара вопросов:
1. как насчет многозадачности, отсутствуещей в php и в принципе возможность применения ее в веб технологиях на c++
2. одним из плюсов я так понимаю является использование одной из наиболее прогрессивной системы работы с памятью в с++, по сравнению с php, но так ли это необходимо в веб разработках?
3. так как программа на с++ уже скомпилирована, то ее можно спокойно относить к закрытому исходному коду, что иногда большой плюс(в production), но в разработке наверняка напрягает необходимость каждый раз перекомпилировать код. Нельзя ли встроить компилятор c++ как модуль к серверу, чтобы переложить эту обязанность на него хотя бы на время разработки?
3. ALEN - 09 Июля, 2011 - 22:44:30 - перейти к сообщению
White
1) Если имелось в виду многопоточность, то в С++ она существует, я правда еще не задавался такой целью, но думаю в будущем решу вопрос и поведаю, что вышло. А вообще читал, что используется:
WIN - CreateThread и _beginthread(ex)
*nix - _beginthread(ex)
Но все это используется в визуальных приложениях точно, а вот под консолью (CGI) - я не уверен, потом попробую найти какую-то информацию (самому стало интересно).

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

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

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

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

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

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

Еще раз хочу отметить, что идеальное решение это использовать связки языков, а не заменять PHP на тот же C++ .
6. White - 10 Июля, 2011 - 13:19:16 - перейти к сообщению
разница между потоком и задачей (в моем понимании, и возможно я не прав), в том что поток в процессе работы может получать новые данные и обрабатывать их(оставаясь в памяти), задача же выполняется над исходными данными один раз, и новые данные (например от пользователя) получить не может (после завершения записывает результат в буфер вывода, и выгружается из памяти).

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

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

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

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

P.S. На самом деле довольно интересная тема, хотелось бы увидеть что-нибудь в примерах, думаю стало бы понятней
7. ALEN - 10 Июля, 2011 - 14:17:59 - перейти к сообщению
White пишет:
в том что поток в процессе работы может получать новые данные и обрабатывать их(оставаясь в памяти), задача же выполняется над исходными данными один раз

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


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

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

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

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

Преимущество С++ перед PHP есть только при создании приложений требующих большую нагрузку на сервер. В простых сайтах не вижу смысла использования С++ вместо PHP.
8. Мелкий - 10 Июля, 2011 - 16:22:00 - перейти к сообщению
White пишет:
Правильно ли я вас понял, что вызванная один раз программа на c++ остается в памяти сервера, а не выгружается из нее после окончания обработки определенных данных, так как это делает любая php программа?

А сам php так же не выгружается.
Суть какая - PHP, будучи написанным на С (или плюсах, не помню точно), можно подключить как FastCGI, при этом он не выгружается из памяти (впрочем, это не слишком давно было сделано, раньше - не выгружался только будучи модулем апача). А при обращении к себе - уже обрабатывает скрипт.
Но нам ничто не мешает сделать самим fastCGI, вкомпилив в него необходимый нам обработчик, убрав тем самым одного посредника.
9. ALEN - 10 Июля, 2011 - 16:51:04 - перейти к сообщению
Мелкий
Действительно это так, но не нужно забывать, что есть еще время затраченное на интерпретацию кода. В то время когда скомпилированный код сразу преобразуется в машинный и потому скорость работы выше.
Так же не буду спорить, что сравнительно недавно в PHP появилась возможность сразу интерпретировать код в машинный, но тем не менее С++ остается по факту более быстрым в частных решениях.
10. Мелкий - 10 Июля, 2011 - 17:50:13 - перейти к сообщению
ALEN пишет:
Действительно это так, но не нужно забывать, что есть еще время затраченное на интерпретацию кода.

Скорее, на компиляцию. PHP - интерпретатор компилирующего типа, всё же.
Но под "обрабатывает скрипт" я и имел в виду весь жизненный путь скрипта, от сборки и разбора пришедших параметров, до выгрузки скрипта и освобождения всех с ним связанных ресурсов. ммм, да, согласен, не дописал эту мысль.
11. White - 10 Июля, 2011 - 18:50:22 - перейти к сообщению
Мелкий пишет:
А сам php так же не выгружается.
Суть какая - PHP, будучи написанным на С (или плюсах, не помню точно), можно подключить как FastCGI, при этом он не выгружается из памяти (впрочем, это не слишком давно было сделано, раньше - не выгружался только будучи модулем апача). А при обращении к себе - уже обрабатывает скрипт.

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

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

это целесообразно в случае использования тех самых библиотек (которые не загружаются в память ядром ОС), а значит скорее всего в больших проектах(впрочем вы сами об этом говорите), но что мешает написать эти библиотеки в качестве модулей php и держать их постоянно в памяти?
12. ALEN - 10 Июля, 2011 - 21:08:20 - перейти к сообщению
White пишет:
эти библиотеки в качестве модулей php

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

тогда возвращаемся к выше сказанному:
Мелкий пишет:
Но нам ничто не мешает сделать самим fastCGI, вкомпилив в него необходимый нам обработчик, убрав тем самым одного посредника.
14. DlTA - 11 Июля, 2011 - 00:26:23 - перейти к сообщению
ALEN и т.д.
вы забыли одну маленькую вещь, "стоимость времени"
история показывает, что процессорное время дешевеет, а вот стоимость времени разработчика все дороже и дороже. посему тратить уйму времени на километры сишного кода (как по мне) неразумно, уж если хоца снизить нагрузку то скорее нужно обратить внимание качество кода.
15. White - 11 Июля, 2011 - 08:18:07 - перейти к сообщению
DlTA
Вы конечно абсолютно правы, но есть задачи с которыми php довольно плохо справляется и которые тем не менее могут перед вами стать, ИМХО. Именно о них и идет речь.

 

Powered by ExBB FM 1.0 RC1