2009-12-07 13 views
8

इसके अलावा, अगर पाइथन या जावा नहीं है, तो क्या आप आमतौर पर एक स्थिर रूप से टाइप की गई भाषा या गतिशील-प्रकार की भाषा चुनते हैं?पायथन बनाम जावा - आप समवर्ती प्रोग्रामिंग करने के लिए क्या चुनेंगे और क्यों?

+4

क्या आपने एरलांग माना है? – jldupont

+7

मुझे लगता है कि समरूपता के लिए बेहतर काम करने के साथ टाइप सिस्टम के पास बहुत कुछ नहीं है। इसके लिए अन्य चीजों की आवश्यकता है, इमो। – Joey

+6

जितना अधिक मैं जावा का उपयोग करता हूं, उतना ही मुझे पायथन पसंद है। मेरे? गुस्सैल? तुमने क्यों पूछा? – retracile

उत्तर

25

मैं पाइथन पर जेवीएम चुनूंगा, मुख्य रूप से क्योंकि पाइथन में बहु-थ्रेडिंग Global Interpreter Lock द्वारा बाधित है। हालांकि, JVM पर चलते समय जावा सबसे अच्छा होने की संभावना नहीं है। Clojure या Scala (अभिनेताओं का उपयोग) दोनों बहु थ्रेडेड समस्याओं के लिए बेहतर अनुकूल होने की संभावना है।

आप जावा चुनते हैं, तो आप java.util.concurrent पुस्तकालयों का इस्तेमाल कर रही पर विचार करें और बहु ​​सूत्रण पुरातन ऐसे के रूप में सिंक्रनाइज़ से बचना चाहिए।

+4

वैश्विक दुभाषिया लॉक समस्या को केवल एक से अधिक दुभाषिया के द्वारा हल किया जाता है: डी http://docs.python.org/dev/library/multiprocessing.html – badp

+1

बहु-थ्रेडिंग निश्चित रूप से समरूपता का एकमात्र तरीका नहीं है –

+1

यदि आप जावा का उपयोग करते हैं, 'प्रैक्टिस में जावा कंसुरेंसी' प्राप्त करते हैं और इसके माध्यम से काम करने के लिए 3-4 महीने का अच्छा खर्च करने के लिए तैयार होते हैं। Concurrency किसी भी भाषा में एक कांटेदार मुद्दा है। –

11

निश्चित रूप से Stackless Python! यह एक पाइथन संस्करण विशेष रूप से समेकन के लिए बनाया गया है।

लेकिन अंत में यह आपके लक्षित प्लेटफॉर्म पर निर्भर करता है और आप जो हासिल करने की कोशिश कर रहे हैं।

4

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

व्यक्तिगत रूप से मैं एफ # चुनता हूं, क्योंकि मैंने आसानी से समवर्ती सॉफ़्टवेयर लिखने के बहुत अच्छे उदाहरण देखे हैं यह।

एक परिचय के रूप में: यह आदमी equally fun as inspiring है, यहां तक ​​कि यदि आपने कभी भी एफ # में रुचि नहीं है तो यह भी देखा होगा।

+0

ध्यान रखें कि एफ # ** ** पूरी तरह से ** अजगर और जावा से अलग है क्योंकि इसकी आवश्यकता है कि आप .NET को जान सकें और शुद्ध कार्यात्मक हो। –

+1

एफ # शुद्ध कार्यात्मक नहीं है, आप कार्यात्मक कोड की एक पंक्ति लिखने के बिना इसके साथ कोई भी प्रोग्राम लिख सकते हैं। – Peter

5

मुझे नहीं लगता कि तर्क भाषा पसंद या स्थैतिक या गतिशील टाइपिंग के बारे में है - यह समरूपता के दो मॉडल - साझा स्मृति और संदेश पासिंग के बीच है। कौन सा मॉडल आपकी स्थिति में अधिक समझ में आता है & क्या आपकी चुनी भाषा आपको एक विकल्प बनाने की अनुमति देती है या क्या आप दूसरे पर एक मॉडल को अपनाने के लिए मजबूर हैं?

क्यों Erlang पर एक नज़र और message passing, Actor model (जो गतिशील टाइपिंग है) है, और पढ़ने के लिए क्यों Joe Armstrong doesn't like shared memory नहीं। ताले और धागे here on SO का उपयोग कर जावा कंसुरेंसी के बारे में भी एक दिलचस्प चर्चा है।

मुझे पायथन के बारे में पता नहीं है, लेकिन जावा, इनबिल्ट लॉक और थ्रेड्स मॉडल के साथ, Kilim नामक एक मेसेज पास फ्रेमवर्क है।

2

मैं जावा का उपयोग ज्योथन के माध्यम से करता हूं। जावा में मजबूत थ्रेड क्षमताएं हैं, और इसे ज्योथन के साथ पायथन सिंटैक्स का उपयोग करके लिखा जा सकता है, इसलिए आपको दो दुनिया में सर्वश्रेष्ठ मिला।

पायथन स्वयं सहमति के साथ वास्तव में अच्छा नहीं है, और जावा से धीमा है।

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

  • नियंत्रण में महारत हासिल करने के बाद से Erland अपने पिटारे में कुछ रूपांतरों की जरूरत है फिट करने के लिए

    • समय: बेशक, आप Erlang पर विचार करना चाहिए तभी जब आप
  • +0

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

    9

    समवर्ती के लिए, मैं जावा का उपयोग करूंगा। जावा का उपयोग करके, मेरा मतलब वास्तव में Scala है, जो एरलांग की समवर्ती संरचनाओं से बहुत अधिक उधार लेता है, लेकिन जावा डेवलपर के लिए शायद (अधिक) अधिक सुलभ है, जिसने पहले कभी भी उपयोग नहीं किया है।

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

    1

    कुछ कार्यों के लिए, पायथन बहुत धीमी है। आपका सिंगल थ्रेड जावा प्रोग्राम बहु-कोर कंप्यूटर पर पायथन के समवर्ती संस्करण से तेज़ हो सकता है ...

    मैं जावा या स्कैला, एफ # या बस सी ++ (एमपीआई और ओपनएमपीआई) पर जाना चाहता हूं।

    1

    जावा पर्यावरण (जेवीएम + पुस्तकालय) (सी) पायथन से समवर्तीता के लिए बेहतर है, लेकिन जावा भाषा बेकार है। मैं शायद जेवीएम पर एक और भाषा के साथ जाऊंगा - ज्योथन का पहले ही उल्लेख किया जा चुका है, और क्लोजर और स्कैला दोनों के पास समेकन के लिए उत्कृष्ट समर्थन है।

    क्लोजर विशेष रूप से अच्छा है - इसमें उच्च प्रदर्शन लगातार डेटा संरचनाओं, एजेंटों और सॉफ्टवेयर लेनदेन संबंधी स्मृति के लिए समर्थन है। यह एक गतिशील भाषा है लेकिन आप इसे जावा के रूप में अच्छा प्रदर्शन करने के लिए संकेतों को टाइप कर सकते हैं।

    रिचर्ड हिकी (क्लोजर के निर्माता) द्वारा इन्फोक्यू पर this video देखें, और क्लोजर इसे कैसे संभालता है।

    1

    मैं उद्देश्य-सी और फाउंडेशन फ्रेमवर्क को देखता हूं। असीमित, समवर्ती प्रोग्रामिंग के लिए अच्छी तरह से प्रदान किया जाता है।

    यह निश्चित रूप से ऐप्पल के डेवलपर टूल्स या जीएनयूस्टेप तक पहुंच पर निर्भर करता है, लेकिन यदि आपके पास किसी एक तक पहुंच है तो यह समवर्ती प्रोग्रामिंग के साथ लेने का एक अच्छा मार्ग है।

    2

    न तो। समवर्ती प्रोग्रामिंग सही होने के लिए कुख्यात रूप से कठिन है। occam-pi जैसी प्रक्रिया उन्मुख प्रोग्रामिंग भाषा का उपयोग करने का विकल्प है जो communicating sequential processes और pi calculus के विचार के आधार पर है। यह डेडलॉक और समवर्ती सिस्टम विकास के दौरान उत्पन्न होने वाली कई अन्य समस्याओं के लिए संकलन समय की जांच करने की अनुमति देता है। यदि आपको ओकम-पी पसंद नहीं है, जो मैं आपको दोष नहीं दे सकता, तो आप Go Google की नई भाषा को आजमा सकते हैं जो सीएसपी के संस्करण को लागू करता है।

    +0

    डेडलॉक के लिए संकलन-समय की जांच ?! मैं इस बात पर उत्सुक हूं कि यह कैसे काम करता है – Setzer

    1

    उत्तर यह है कि यह निर्भर करता है। उदाहरण के लिए आप एक ही मशीन पर एकाधिक कोर या सीपीयू का लाभ लेने की कोशिश कर रहे हैं या क्या आप अपने काम को कई मशीनों में वितरित करना चाहते हैं? गति बनाम कार्यान्वयन की आसानी कितनी महत्वपूर्ण है?

    जैसा कि पहले उल्लेख किया गया है, पाइथन में ग्लोबल इंटरप्रेटर लॉक है लेकिन आप multiprocessing मॉड्यूल का उपयोग कर सकते हैं। ध्यान दें कि Stackless बहुत अच्छा है, यह won't utilise multiple cores है। पाइथन आमतौर पर जावा की तुलना में काम करना आसान माना जाता है। यदि गति प्राथमिकता है तो जावा आमतौर पर तेज़ होता है।

    जावा में java.util.concurrent लाइब्रेरी एक मशीन पर समवर्ती अनुप्रयोगों को सरल बनाता है लेकिन आपको अभी भी किसी भी साझा स्थिति के आसपास सिंक्रनाइज़ करने की आवश्यकता होगी। जबकि जावा अनिवार्य रूप से समेकन के लिए सबसे अच्छी भाषा नहीं है, वहां मदद करने के लिए बहुत से उपकरण, पुस्तकालय, दस्तावेज और सर्वोत्तम अभ्यास हैं।

    धागे और साझा राज्य के बजाय संदेश गुजरने और अपरिवर्तनीयता का उपयोग प्रोग्रामिंग समवर्ती अनुप्रयोगों के लिए बेहतर दृष्टिकोण माना जाता है। कार्यात्मक भाषाएं जो उत्परिवर्तन और साइड इफेक्ट्स को हतोत्साहित करती हैं उन्हें परिणामस्वरूप अक्सर पसंद किया जाता है। यदि एकाधिक मशीनों पर आपके समवर्ती अनुप्रयोगों को वितरित करना एक आवश्यकता है, तो इसके लिए डिज़ाइन किए गए रनटाइम को देखना उचित है। Erlang या Scala Actors

    संबंधित मुद्दे