2010-10-24 7 views
27

मैंने कुछ तर्कों में यह तर्क देखा है, और अब हाल ही में मैंने इसे फिर से एक Reddit पोस्ट पर देखा है। यह इन दोनों भाषाओं में से किसी के खिलाफ लौ नहीं है। मैं सिर्फ परेशान हूं कि पाइथन के बारे में इस बुरी प्रतिष्ठा को स्केलेबल क्यों नहीं किया जा रहा है।
मैं एक अजगर लड़का हूं और अब मैं जावा के साथ शुरू कर रहा हूं और मैं सिर्फ यह समझना चाहता हूं कि जावा को इतना स्केलेबल बनाता है और यदि मेरे पास पाइथन सेटअप है जो बड़े पायथन ऐप्स को स्केल करने का एक अच्छा तरीका है।लोग क्यों कहते हैं कि जावा पाइथन से अधिक स्केलेबल है?

अब पाइथन ऐप को स्केल करने के मेरे विचार पर वापस जाएं। मान लें कि आप Django का उपयोग करके इसे कोड करते हैं। Django Fastcgi मोड में अपने ऐप्स चलाता है। तो क्या होगा यदि आपके पास एक फ्रंट Nginx सर्वर है और इसके पीछे कई अन्य सर्वर हैं जो प्रत्येक आपके Django ऐप को फास्टसीजी मोड में चलाएंगे। फ्रंट Nginx सर्वर तब आपके बैकएंड Django fastcgi रनिंग सर्वर के बीच संतुलन लोड करेगा। Django कई डेटाबेस का भी समर्थन करता है ताकि आप एक मास्टर डीबी को लिख सकें और फिर लोड संतुलन के लिए फिर से कई दासों से पढ़ सकें। इस मिश्रण में एक memcached सर्वर फेंको और वहां आप स्केलेबिलिटी है। क्या तुम नहीं हो

क्या यह एक व्यवहार्य सेटअप है? जावा बेहतर बनाता है क्या? आप जावा ऐप को कैसे स्केल करते हैं?

+0

यह शायद बंद हो जाएगा क्योंकि जब भी आप गतिशील भाषाओं के साथ संभावित समस्याओं पर चर्चा करते हैं, भावनाओं को बहुत तेजी से चोट पहुंचती है। हालांकि, ध्यान रखें, पाइथन स्केलिंग के बारे में आपका विचार ठीक हो सकता है लेकिन यह कुछ भी नहीं कहता है कि जावा अधिक स्केलेबल है या नहीं। इसके अलावा, एक और बात पर विचार करने के लिए, यदि एक मंच दूसरे को "समान रूप से अच्छी तरह से" स्केल कर सकता है लेकिन उसे अधिक जटिल सेटअप की आवश्यकता है, तो क्या यह वास्तव में अधिक स्केलेबल है? – BobbyShaftoe

+4

"भावनाएं बहुत तेजी से चोट लगती हैं"। मुझे लगता है कि कुछ लोगों को बहुत अधिक कॉफी रखना बंद करना चाहिए और जीवन में अधिक महत्वपूर्ण चीजों पर ध्यान देना चाहिए। यह सिर्फ एक लानत भाषा है ... –

+4

स्केलेबल कई चीजों का मतलब हो सकता है। यदि आप कहते हैं कि कुछ स्केल नहीं करता है, तो आपको किस तरह से कहना है, और यह भी कहना है कि यह क्यों महत्वपूर्ण है। सी ++ 100 के धागे तक स्केल कर सकता है और जावा 10 के धागे तक स्केल कर सकता है, लेकिन अगर आपको केवल 10 धागे की आवश्यकता है, तो क्या इससे कोई फर्क पड़ता है? –

उत्तर

21

स्केलेबिलिटी इन दिनों बहुत अधिक अधिभारित शब्द है। टिप्पणियां शायद इन-प्रोसेस वर्टिकल स्केलेबिलिटी को संदर्भित करती हैं।

अजगर एक वैश्विक दुभाषिया ताला (जीआईएल) कि गंभीर रूप से कई धागे अप करने के लिए पैमाने पर करने की क्षमता को सीमित करता है। यह देशी कोड को कॉल करते समय इसे रिलीज़ करता है (देशी रिटर्न के दौरान इसे पुनः प्राप्त करना), लेकिन पाइथन में स्केलेबल सॉफ़्टवेयर लिखने की कोशिश करते समय भी इसे सावधानीपूर्वक डिज़ाइन की आवश्यकता होती है।

+8

ने कहा कि, स्टैकलेस जैसे कुछ कार्यान्वयन थ्रेडिंग पहलू में बेहतर हैं - बहुत बेहतर। उदाहरण के लिए, एमएमओआरपीजी ईव ऑनलाइन द्वारा स्टैकलेस पायथन नियोजित है। –

+4

लेकिन यह ध्यान दिया जाना चाहिए कि स्टैकलेस पायथन जीआईएल को नहीं हटाता है। यह समवर्ती प्रोग्रामिंग को आसान बना सकता है लेकिन यह समानांतर निष्पादन को सक्षम नहीं करता है। पीपीपी और अनलाडेन निगल दोनों ने जीआईएल को अपने लक्ष्यों में से एक के रूप में हटा दिया है, लेकिन न तो (जैसा कि मुझे याद है) अभी तक हैं। आयरनपीथन और ज्योथन एकमात्र गंभीर हैं, वर्तमान में जीआईएल-कम दावेदार जहां तक ​​मुझे पता है। –

+1

@ टिम: स्टैकलेस सिंगल-थ्रेडेड है। यह अत्यधिक समवर्ती व्यवहार की अनुमति देने के लिए धागे को अनुकरण करता है, जब तक कि सब कुछ I/O-bound है। लेकिन अगर आप एक 8-कोर सिस्टम पर स्टैकलेस के माध्यम से एक सीपीयू-बाध्य वर्कलोड चलाते हैं, तो आपको लगभग 12% उपयोग नहीं दिखाई देगा। –

3

एक flamewar में हो रही बिना, पर विचार कैसे अजगर मल्टी-थ्रेडेड क्षुधा संभालती जावा की तुलना में? उदाहरण के लिए, समेकन को चोट पहुंचाने वाली दोनों भाषाओं में कौन से वैश्विक ताले लगाए गए हैं (संकेत, पायथन का जीआईएल - ग्लोबल इंटरप्रेटर लॉक)?

12

जबकि मैं कथन से सहमत नहीं हूं, मुझे लगता है कि वे सोचते हैं कि जावा अधिक स्केलेबल है क्योंकि यह लॉट तेज करता है। जेवीएम बहुत ही कुशल है (शायद स्मृति उपयोग में छोड़कर)। इसके अलावा पायथन का जीआईएल (ग्लोबल इंटरप्रेटर लॉक) "असली" थ्रेडिंग की अनुमति नहीं देता है, जबकि जावा में जीआईएल नहीं है और इसमें सच बहुसंख्यक है।

+0

"JVM" से आपका क्या मतलब है? यह सिर्फ एक कल्पना है जिसे बहुत अलग तरीकों से लागू किया जा सकता है, जिससे बहुत अलग प्रदर्शन परिणाम सामने आते हैं। एक डिक होने की कोशिश नहीं कर रहा है, वास्तव में सिर्फ उत्सुक है। –

+3

हॉटस्पॉट, जो अधिकांश लोग उपयोग करते हैं। –

+4

लेकिन पाइथन जेवीएम पर चलता है, और इसके परिणामस्वरूप हॉटस्पॉट पर भी स्पष्ट रूप से चलता है, इसलिए यदि स्केलेबिलिटी हॉटस्पॉट के बारे में है, और दोनों भाषा हॉटस्पॉट पर चलती हैं, तो दूसरे की तुलना में एक "अधिक स्केलेबल" क्यों है? –

1

हम्म - स्केलेबल का मतलब कई चीजें हो सकता है - वितरित आर्किटेक्चर द्वारा स्केलेबल, गति से स्केलेबल?

स्पीड फ्रंट द्वारा स्केलेबल पर, जावा आमतौर पर पाइथन से तेज़ी से निर्देशों को संसाधित कर सकता है - सही प्रकार की समस्या के लिए, बहुत तेज (मुझे लगता है कि इसका मुख्य कारण यह है कि जावा संकलित है जबकि पायथन का अर्थ है)। उस बिंदु से, जावा आमतौर पर कम से कम अधिक कर सकता है, और इसलिए अधिक स्केलेबल है।

मैं अपने स्रोत प्रयोगात्मक जानकारी को दो स्रोतों में वापस संदर्भित कर रहा हूं; http://mrpointy.wordpress.com/2007/11/06/java-vs-python-performance/ और http://blog.dhananjaynene.com/2008/07/performance-comparison-c-java-python-ruby-jython-jruby-groovy/

+2

संख्या क्रंचिंग फ्रंट पर, आप तकनीकी रूप से सही हैं। इसके अलावा, पाइथन में किसी भी गंभीर संख्या में क्रंचिंग [numpy] (http://numpy.scipy.org/) लाइब्रेरी का उपयोग करके किया जाता है, जो सी/फोरट्रान आधारित है और आमतौर पर जावा पुस्तकालयों से बेहतर प्रदर्शन करता है। –

+0

क्षमा करें, जब मैं संख्या क्रंचिंग कहता हूं, तो मैं विशेष रूप से रैखिक बीजगणित और इसी तरह का जिक्र नहीं कर रहा हूं। मैं rephrase होगा। – Brabster

+1

1) पायथन का अर्थ नहीं है, यह संकलित है। यही वही है जो डाउनवोट है। 2) अधिकांश संख्या क्रंचिंग रैखिक बीजगणित "और पसंद है" को कम कर देता है। – aaronasterling

3

मुझे लगता है कि इस लेख स्केलिंग और गतिशील भाषाओं के बारे में तर्क से कई का सार:

http://blogs.tedneward.com/2008/01/24/Can+Dynamic+Languages+Scale.aspx

यह स्केलिंग के लिए अपने दो परिभाषा ध्यान देने योग्य है ...

  1. परियोजना के आकार, लाइनों के-कोड (एलओसी)
  2. क्षमता हैंडलिंग, के रूप में के रूप में

एक के बारे में अक्सर इस्तेमाल किया तर्क "यह प्रति सेकंड 1,00,000 अनुरोध करने के लिए पैमाने पर करने की जरूरत है" कोई गतिशील भाषा स्केलिंग यह है कि कोड-बेस बढ़ने के साथ आईडीई समर्थन के बिना इसे पुन: सक्रिय करना मुश्किल हो जाता है। संकलन समय पर प्रकार की जानकारी की कमी के कारण गतिशील भाषाओं में लागू करना अक्सर समर्थन असंभव होता है।

+0

मैं इस पर बकवास बुला रहा हूँ। स्वचालित रिफैक्टरिंग आईडीई * गतिशील भाषाओं में * आविष्कार * और विजुअलवर्क्स और सह जैसे गतिशील भाषा आईडीई में रिफैक्टरिंग समर्थन का आविष्कार किया गया था। स्थिर रूप से टाइप की गई भाषाओं के लिए मैंने जो भी देखा है उससे अभी भी आगे है। –

+0

शाप देने की कोई ज़रूरत नहीं है! - मैं गतिशील भाषाओं का एक बड़ा प्रशंसक हूं लेकिन यह एक तथ्य है कि कई प्रकार के रिफैक्टरिंग गतिशील भाषाओं में लागू करने के लिए बहुत कठिन हैं। http://beust.com/weblog/2006/10/01/dynamic-language-refactoring-ide-pick-one/ – Pablojim

0

जब मैं इस तरह के तर्क देखता हूं तो मुझे पागल हो जाता है। ऐसा इसलिए नहीं है क्योंकि मुझे अपने पाइथन मित्र को कठोर करने वाले शत्रुओं के बारे में सभी कड़वाहट मिलती है, लेकिन मेरे दिमाग के कारण, "एक्स स्केल नहीं करता" अर्थहीन है। कम से कम एक आयाम निर्दिष्ट करना आवश्यक है।

लोग ऐसा करने में अनिच्छुक हैं, क्योंकि यह अक्सर इस तथ्य को प्रकट करता है कि उनके पास इस समस्या पर अच्छा संभाल नहीं है कि वे विश्वास के साथ बात कर रहे हैं। ग्लोबल दुभाषिया लॉक यहां एक अच्छा टचस्टोन है: समवर्ती परिचालन करने के लिए धागे एकमात्र तरीका नहीं हैं।