2010-01-05 8 views
5

Zgodnie z this page wydaje się, że Perl, PHP, Python są 50 razy wolniejsze niż C/C++/Java.Który język programowania odpowiada krytycznemu rozwojowi aplikacji internetowych?

Tak więc myślę, że Perl, PHP, Python nie były w stanie obsłużyć krytycznej aplikacji (np.> 100 milionów użytkowników,> xx milionów żądań na sekundę). Jednak istnieją wyjątki, np. facebook (mówi się, że Facebook jest napisany w całości z PHP), wikipeida. Co więcej, słyszałem, że Google w dużym stopniu korzysta z Pythona.

Dlaczego więc jest to szybszy sprzęt wypełniający dużą lukę prędkości pomiędzy C/C++/Java i Perl/PHP/Python?

dzięki.

+3

Krok 1. Określ, na czym Ci zależy. Krok 2. Opracuj systemy gromadzenia liczb dla tych przypadków w różnych językach. Krok 3. Porównaj, wybierz język i narzędzie. –

+3

Powszechnie mówi się, że świetni programiści mogą kodować świetne programy w brzydkim języku, a nieudolny programista może kodować nieciekawe programy w świetnym języku. więc ważne jest to, jak je kodujesz, wybór języka jest drugorzędny. ;) – Lukman

+2

Jeśli potrzebujesz wybrać szybki język do implementacji znanego algorytmu, wyniki testów strzeleckich coś znaczą. Jeśli chcesz wybrać język, w którym chcesz napisać aplikację biznesową, testy porównawcze nie oznaczają przysiadu. Problem nie polega na tym, "który język może zrobić X szybciej", ponieważ nie ma prostego X dla "twojego biznesu". Wydajność i solidność w dużej mierze sprowadzają się do tego, jak dobrzy są wasi programiści, a nie język. – Schwern

Odpowiedz

5

Strona łączysz mówi tylko pół prawdy. Oczywiście języki natywne są szybsze niż dynamiczne, ale ma to krytyczne znaczenie dla aplikacji o wysokich wymaganiach obliczeniowych. W przypadku większości aplikacji internetowych nie jest to takie ważne. Żądanie internetowe jest zwykle podawane szybko. Ważniejsze jest posiadanie wydajnej struktury, która odpowiednio zarządza zasobami i szybko uruchamia nowe wątki, aby obsługiwać żądania. Również zachowanie w czasie nie jest jedynym krytycznym aspektem. Niezawodne i wolne od błędów aplikacje są prawdopodobnie lepiej osiągalne dzięki dynamicznym językom.

I nie, szybszy sprzęt nie jest rozwiązaniem. W rzeczywistości Google słynie z klastra niedrogich komputerów.

+0

Szybszy sprzęt to Rozwiązanie; Google zdecydowało, że bardziej opłacalne jest używanie sprzętu towarowego o szerokim zakresie tolerancji na ciepło. –

+0

Szybszy sprzęt to rozwiązanie, dzięki któremu odpowiednio zaprojektowana aplikacja działa szybciej i może służyć większej liczbie użytkowników. Nie jest to rozwiązanie, które sprawi, że źle zaprojektowana aplikacja będzie działać lepiej. – kgiannakakis

+1

kgiannakakis + Robert Grant ergo, Google to kiepsko zaprojektowana aplikacja –

2

nie ma kompilator JIT w php, które kompilacji kodu na kod maszynowy

Innym ważnym powodem jest dynamiczna wpisywanie PHP. Dynamicznie wpisany język jest zawsze będzie wolniejszy ..

kliknij poniżej i przeczytaj więcej

What makes PHP slower than Java or C#?

+0

dlaczego głosowanie w dół? !! – Hiyasat

+4

Po zaniechaniu dodaj komentarz wyjaśniający, dlaczego cofasz głos, aby użytkownik, który udzielił odpowiedzi, miał szansę na poprawę siebie i poprawę w przyszłości. –

+0

Pytanie nie dotyczy tego, dlaczego jeden język jest wolniejszy od drugiego. Pytanie brzmi, które jest lepsze dla tworzenia stron internetowych, więc odpowiada na niewłaściwe pytanie. Ponadto PO jest zdezorientowany, że surowe wyniki poprawiają język, a ta odpowiedź tylko to napędza. – Schwern

3

(takich jak> 100 mln użytkownika> xx mln żądanie co drugi)

Aby osiągnąć ten rodzaj wykonania, będziesz musiał zaprojektować i wdrożyć site web/aplikacji w formie skalowalny system wielowarstwowy z replikacją na (prawdopodobnie) wszystkie poziomy. W tym momencie fakt, że jeden język programowania jest szybszy/wolniejszy od innego, prawdopodobnie wpływa tylko na liczbę maszyn potrzebnych w farmie procesorów. Projekt architektury systemu jest o wiele bardziej znaczący.

0

Google używa Pythona do GAE, a Windows Azure udostępnia PHP. Architektura LAMP doskonale nadaje się do skalowalności aplikacji.

Uważam także, że język programowania nie jest tak ważny w odniesieniu do wydajności. Najważniejszą rzeczą jest spojrzenie na architekturę swojej aplikacji.

Mam nadzieję, że to pomaga

0

Służyć stronę internetową, trzeba:

  1. odbierania i analizowania wniosku.
  2. Zdecyduj, co chcesz zrobić z tym żądaniem.
  3. Trwałe dane do odczytu/zapisu (baza danych, pamięć podręczna, system plików)
  4. Dane wyjściowe HTML.

"Szybkość" języka po stronie serwera odnosi się tylko do kroków 2 i 4. Biorąc pod uwagę, że większość skryptów dokłada wszelkich starań, aby krok 2 był możliwie jak najkrótszy, a większość języków internetowych (w tym PHP) optymalizuje krok 4 tak często, jak to tylko możliwe, na każdej poważnej stronie internetowej większość czasu przetwarzania żądania zostanie wydana w kroku 3.

Czas spędzony w kroku 3 jest niezależny od języka używanego po stronie serwera ... chyba że zaimplementujesz własną bazę danych i rozproszoną pamięć podręczną.

7

Kod obliczeniowy to najmniejszy problem w większości aplikacji internetowych o dużym natężeniu użytkowania.

butelce szyje w typowym wysokiej Dostępna od aplikacji internetowych są (nie nessecarility w tej kolejności, ale najbardziej prawdopodobne):

  1. Database (IO i CPU)
  2. File IO
  3. Przepustowość sieci
  4. pamięci na serwerze aplikacji
  5. Twój Java/C++/PHP/Python kod

Twoje główne obawy, by złożyć podanie skalowalny to:

  1. Zmniejszenie dostępu do bazy danych (buforowania, z klastrów na uwadze, mądry quering)
  2. rozpowszechniać aplikację (klastrów)
  3. wyeliminować zbędne zamki synchronizacji między wątkami (zobacz commons-pool 1.3)
  4. Utwórz poprawne indeksy DB, model danych i replikację, aby obsłużyć wielu użytkowników.
  5. Zmniejsz rozmiar odpowiedzi za pomocą aktualizacji przyrostowych (AJAX)

Dopiero po wszystkie powyższe są realizowane, optymalizacji kodu

Prosimy dodać więcej do listy, jeśli coś przeoczyłem

1

C jest łatwo najszybszy język tam. Jest tak szybki, że piszemy w nim inne języki. Nikt poważnie nie pisze stron internetowych w C. Dlaczego? Bardzo łatwo jest go wkręcić w C w sposób bardzo trudny do wykrycia i prawie nic nie może ci pomóc. W skrócie, zjada programistów i generuje błędy.

Budowanie solidnej, szybkiej aplikacji nie polega na wybieraniu najszybszej wersji językowej, jej a) łatwości konserwacji i B) skalowalności.

Łatwość utrzymania oznacza, że ​​nie ma wielu błędów. Oznacza to, że możesz szybko dodawać nowe funkcje i modyfikować istniejące. Chcesz języka, który wykonuje dla ciebie jak najwięcej pracy i nie przeszkadza. Właśnie dlatego takie rzeczy jak Perl, Python, PHP i Ruby są tak popularne. Wszystkie zostały napisane z myślą o wygodzie programisty, w porównaniu z surową wydajnością lub porządkiem. C został napisany dla surowego wykonania. Java została napisana dla pojęciowej czystości.

Skalowalność oznacza, że ​​można przejść od 10 użytkowników do 10 000 użytkowników bez konieczności przepisywania całości. To oznaczało, że napisałeś najściślejszy kod, którym możesz zarządzać, ale wysoce zoptymalizowany kod jest zazwyczaj trudny do utrzymania.Zwykle oznacza to robienie rzeczy na korzyść komputera, a nie człowieka i biznesu. Poświęca to łatwość konserwacji i musisz powiedzieć swojemu szefowi, że jej dodanie zajmie 3 miesiące.

Skalowalność w dzisiejszych czasach osiąga się głównie poprzez wyrzucanie sprzętu i równoległe działanie. Ile procesów, procesorów i maszyn możesz wykorzystać w swojej pracy? Jeśli możesz to osiągnąć, możesz po prostu odpalić kolejny tani komputer w chmurze, jak tego potrzebujesz. Oczywiście będziesz chciał zoptymalizować niektóre, ale w tej skali masz o wiele więcej możliwości zastosowania lepszego algorytmu niż dokręcania kodu.

Na przykład, wziąłem powolne aplikacji PHP, który zmagał się obsługiwać 50 użytkowników jednocześnie, przełączane z Apache z mod_php do lighttpd z równoważeniem obciążenia, zdalne FastCGI procesy umożliwiające Zrównoleglanie z minimum zmiany kodu. Kilka podstawowych profilów ujawniło, że framework PHP użyty do prototypowania był powolny, więc został usunięty. Profilowanie również sugerowało kilka indeksów, aby przyspieszyć uruchamianie zapytań do bazy danych. Rezultatem końcowym był system, który był w stanie obsłużyć tysiące użytkowników i można było w razie potrzeby dodać więcej pamięci, pozostawiając większość kodu implementującego logikę biznesową nietkniętą. Zajęło to kilka tygodni i nie znam zbyt dobrze PHP.

Korzystne może być ponowne zaimplementowanie małych, ostrych elementów w bardzo szybkim języku, ale zwykle jest to już zrobione dla Ciebie w formie zoptymalizowanej biblioteki lub narzędzia. Na przykład twój serwer internetowy. Dla złożoności i ciągle zmieniających się potrzeb logiki biznesowej ważna jest łatwość utrzymania i jak dobrzy są programiści.

Przekonasz się, że większość sieci jest napisana w PHP, Perl i Pythonie, ponieważ są one łatwe do napisania, z małymi, ostrymi bitami napisanymi w językach takich jak C, Java i egzotyczne, takie jak Scala (na przykład Twitter) . Wikia, na przykład, jest zmodyfikowanym Mediawiki, który jest napisany w PHP, ale jest wydajny (między innymi) przez wykonanie heroic amount of caching.

+0

"Jest tak szybki, że piszemy w nim inne języki" - to znacznie więcej niż oczekiwanie, że jakikolwiek sprzęt będzie istnieć, jakiś kompilator C będzie obsługiwał ten sprzęt. – igouy

0

Dla php, istnieje wiele rzeczy, które możesz zrobić, aby zwiększyć wydajność. Na przykład

  • Php Accelerator
  • buforowania Zapytania
  • Optymalizacja Zapytania
  • Korzystanie profilera znaleźć wolniejszych partiach i optymalizacji

tych rzeczy na pewno pomogą zmniejszyć lukę pomiędzy niższymi językach szczebla. Aby odpowiedzieć na twoje pytanie, w kodzie są jeszcze inne rzeczy, które możesz zoptymalizować i sprawić, by działały szybciej

0

Zgadzam się z LUC. To architektura, która naprawdę ma znaczenie, a nie język programowania.

Powiązane problemy