LMAX की टीम ने जावा का उपयोग क्यों किया और हर कीमत पर GC से बचने के लिए आर्किटेक्चर को डिजाइन किया?


24

LMAX की टीम ने Java में LMAX डिस्प्रेटर को क्यों डिज़ाइन किया लेकिन उनके सभी डिज़ाइन जीसी के उपयोग को कम करते हैं? अगर कोई जीसी चलाना नहीं चाहता है तो एक कचरा एकत्र भाषा का उपयोग क्यों करें?

उनकी आशाएँ, हार्डवेयर ज्ञान का स्तर और उनके द्वारा लगाई गई सोच बस कमाल है लेकिन जावा क्यों?

मैं जावा या किसी भी चीज़ के खिलाफ नहीं हूं, लेकिन जीसी भाषा क्यों? जीसी के बिना डी या किसी अन्य भाषा जैसी किसी चीज़ का उपयोग क्यों न करें लेकिन कुशल कोड की अनुमति देता है? क्या ऐसा है कि टीम जावा से सबसे ज्यादा परिचित है या जावा के पास कुछ अनोखा फायदा है जो मुझे दिखाई नहीं दे रहा है?

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


6
मैं इस परियोजना के बारे में बहुत कम जानता हूं, लेकिन ऐसा लगता है कि यह किसी प्रकार का ढांचा है, जिसे अन्य लोग बना सकते हैं। और अगर आप लिखने के लिए प्रबंधन है कि जावा में (और जावा में कोड करने के लिए दूसरों की अनुमति है और लाभ), तो आप एक बहुत बड़ा "ग्राहक आधार" होगा अगर आप इसे डी में लिखा है अधिक पसंद करेंगे
जोआचिम सौएर

6
@ कदज: उपभोक्ता या सार्वजनिक होने पर यह वास्तव में कोई फर्क नहीं पड़ता: यदि आप इसे व्यापक रूप से ज्ञात भाषा में सुलभ बनाते हैं, तो यह आंतरिक विकास के लिए भी अधिक उपयोगी होगा। यदि आप अपने (काल्पनिक) तर्क के साथ शुरू करते हैं: "मान लें कि हर कोई डी को जानता है और साथ ही वह जावा, ..." को जानता है, तो आप शायद कुछ याद कर रहे हैं।
जोकिम सॉर

6
कुछ लोग सभी प्रकार की समस्याओं के लिए हथौड़ों का उपयोग करना पसंद करते हैं। एक मोटा किनारा मिला जिसे आप बंद करना चाहते हैं, इसे अपने हथौड़े से तब तक काटें जब तक कि यह चिकना न हो जाए। एक पेंच मिला जिसे आपको चलाने की ज़रूरत है, इसे तब तक एक हथौड़ा से दंशित करें जब तक कि आपको एक नाजुक आभूषण न मिल जाए, आपको नीचे सैंड करने की ज़रूरत है, इसे हथौड़ा से मारें और फिर "चूसने" के लिए आभूषण को दोष दें। C या C ++, D से बेहतर विकल्प होता, यदि केवल मौजूदा ज्ञान आधार के लिए। निश्चित नहीं है कि आप टीबीएच को एक उदाहरण के रूप में भी क्यों लाए।
gbjbaanb

2
@gbjbaanb I ने D का उल्लेख किया है क्योंकि यह कचरा संग्रह प्रदान करता है (ऐसे मामलों में जहां उच्च स्तर के सार आवश्यक हैं और स्मृति के साथ फ़िडलिंग मस्तिष्क के लिए बहुत कठिन है) लेकिन सी स्टाइल मॉलोक और मुक्त के साथ मैनुअल मेमोरी प्रबंधन की भी अनुमति देता है। D, ARC (कोई वास्तविक GC) के साथ Objective-C की तरह है लेकिन उससे बेहतर है। लेकिन हाँ, C / C ++ बिल फिट होगा।

4
@ कदज मैं देख रहा हूं कि आप डी लाने के लिए यहां कुछ फलैक कर रहे हैं, लेकिन मैं यह कहना चाहता हूं कि मैं उस टोन में निराश हूं जो दूसरे लोग उपयोग कर रहे हैं और बाहर रखना चाहते हैं कि मुझे लगता है कि डी हाथ में सवाल के लिए केंद्रीय है। हालांकि डी वास्तव में व्यापक रूप से उपयोग नहीं किया गया है, डी कुछ उच्च-स्तरीय निर्माण प्रदान करता है जो मुझे जावा या सी # में खोजने की उम्मीद कर सकते हैं लेकिन कम से कम (पुरानी शैली में) सी ++ नहीं। यह अभी भी प्रबंधित और अप्रबंधित मिश्रण के लिए प्रदान करता है - जो कि केवल एक ही भाषा के बारे में है जो मुझे पता है! तो D केवल एक पालतू पशु की पसंद नहीं है, बल्कि एक है जिसमें जीसी के चारों ओर मूल सवालों के साथ गोल किए गए हैं।
जे ट्राना

जवाबों:


20

क्योंकि प्रदर्शन के अनुकूलन और पूरी तरह से सुरक्षा को बंद करने के बीच एक बड़ा अंतर है

जीसी की संख्या को कम करके, उनका ढांचा अधिक संवेदनशील है और (संभवतः) तेज चला सकता है। अब, कचरा कलेक्टर के लिए अनुकूलन का मतलब यह नहीं है कि वे कभी भी कचरा संग्रह नहीं करते हैं। इसका मतलब यह है कि वे इसे कम बार करते हैं, और जब वे ऐसा करते हैं, तो यह वास्तव में तेजी से चलता है। उन प्रकार के अनुकूलन में शामिल हैं:

  1. छोटी थ्रो-ऑब्जेक्ट्स का उपयोग करके किसी बचे स्थान (यानी जो कम से कम एक कचरा संग्रह में बच जाता है) पर जाने वाली ऑब्जेक्ट की संख्या को कम करना। बची हुई जगह पर ले जाने वाली वस्तु को इकट्ठा करना कठिन होता है और यहां कचरा संग्रह होने से कुछ समय में पूरे जेवीएम को ठंड लगने लगती है।
  2. शुरू करने के लिए बहुत से ऑब्जेक्ट आवंटित न करें। यदि आप सावधान नहीं हैं तो यह बैकफ़ायर हो सकता है, क्योंकि युवा पीढ़ी के ऑब्जेक्ट आवंटित करने और इकट्ठा करने के लिए सुपर सस्ते हैं।
  3. सुनिश्चित करें कि नई वस्तु पुराने को इंगित करती है (और उसके आसपास दूसरा तरीका नहीं है) ताकि युवा वस्तु को इकट्ठा करना आसान हो, क्योंकि उनके लिए कोई संदर्भ नहीं है जिससे उन्हें रखा जाएगा

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


अब, यदि आप पूरी तरह से कचरा संग्रहण बंद कर देते हैं, तो आप चयन नहीं कर सकते । आपको हर वस्तु को कभी भी मैन्युअल रूप से निपटाना होगा । उस विधि को प्रति दिन अधिकतम एक बार कहा जाता है? जावा में, आप इसे होने दे सकते हैं, क्योंकि इसका प्रदर्शन प्रभाव नगण्य है (हर महीने पूर्ण जीसी होने देना ठीक हो सकता है)। C ++ में, आप अभी भी संसाधन लीक कर रहे हैं, इसलिए आपको उस अस्पष्ट पद्धति का भी ध्यान रखना चाहिए। इसलिए आपको अपने आवेदन के प्रत्येक, एकल, हिस्से में संसाधन प्रबंधन के लिए मूल्य का भुगतान करना होगा , जबकि जावा में आप ध्यान केंद्रित कर सकते हैं।


लेकिन यह खराब हो जाता है।

यदि आपके पास एक बग है, तो अपने आवेदन के एक अंधेरे कोने में कहें जो केवल सोमवार को पूर्णिमा पर पहुंचता है? जावा में मजबूत सुरक्षा की गारंटी है। कोई भी "अपरिभाषित व्यवहार" नहीं है। यदि आप कुछ गलत उपयोग करते हैं, तो एक अपवाद फेंक दिया जाता है, आपका प्रोग्राम बंद हो जाता है, और कोई डेटा भ्रष्टाचार नहीं होता है। तो आपको पूरा यकीन है कि आपके बिना कुछ भी गलत नहीं हो सकता।

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


ठीक है, ठीक है, ज्यादातर समय की तुलना में यह बहुत कम नाटकीय है। लेकिन यहां तक ​​कि एक व्यवसायिक महत्वपूर्ण एप्लिकेशन या सिर्फ एक जीपीएस ऐप या यूं कहें कि, एक सरकारी स्वास्थ्य सेवा वेबसाइट कुछ नकारात्मक परिणाम प्राप्त कर सकती है यदि आपके पास कीड़े हैं। एक ऐसी भाषा का उपयोग करना जो या तो उन्हें पूरी तरह से रोकती है या असफल-तेज होती है जब वे आमतौर पर एक बहुत अच्छा विचार होता है।

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

लेकिन विशेष रूप से डी के बारे में क्या? यदि आप अंधेरे कोनों के लिए चाहते हैं, तो आपके पास एक GC है, और SafeD सबसेट (जिसे मैं संपादित करने से पहले नहीं जानता था) अपरिभाषित व्यवहार को हटा दें (यदि आप इसे उपयोग करना याद रखें!)।

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

इसलिए मेरा आखिरी बिंदु अभी भी पकड़ में है: यदि आप गंभीर परिणामों से समस्याओं से बचना चाहते हैं, तो सुरक्षित विकल्पों के साथ रहें। डी के जीवन में इस बिंदु पर, इसके ग्राहक पागल जोखिम लेने के लिए तैयार छोटे स्टार्ट-अप हैं। यदि किसी समस्या पर लाखों खर्च हो सकते हैं, तो आप नवाचार बेल वक्र में और बेहतर रह सकते हैं ।


2
मूल पोस्ट विशेष रूप से डी को बुलाती है। वास्तव में पसंद की ग्रैन्युलैरिटी के संबंध में सी ++ और डी के बीच काफी बड़ा अंतर है। भले ही आप SafeD सबसेट में पूर्ण-प्रबंधित जाने के लिए चुनते हैं, मुझे लगता है कि आपको संग्रह और समय के कुछ पहलुओं पर बहुत अधिक नियंत्रण प्राप्त करना है (सक्षम / अक्षम करें, एकत्र करें, कम से कम करें)। स्मृति प्रबंधन के लिए डिजिटल मंगल की रणनीतियों की
जे ट्राना

2
lmax जानबूझकर सुरक्षा प्रदान करता है जावा के कुछ कदम
जेम्स

यह एक बेहतरीन जवाब होगा, सिवाय इसके कि जावा को मिशन क्रिटिकल सॉफ्टवेयर के लिए लाइसेंस नहीं दिया गया है। यदि आपके पास परमाणु रिएक्टर है, तो इसे C ++ में लिखा जाएगा और जावा में नहीं, जो थोड़े पूरे "सुरक्षा" पहलू को बाहर फेंकता है।
gbjbaanb

@ जीबीजैनब, [उद्धरण वांछित]। विश्वसनीयता मानकों / दिशा-निर्देशों को मैंने पहले अन्य भाषाओं के पक्ष में C / C ++ से बचने की सलाह दी है ; और यदि उनमें हो रहा है, तो भाषाओं के अत्यधिक प्रतिबंधित संस्करणों (MISRA, आदि) का उपयोग करना। और एक बार जब आप प्रतिबंध स्वीकार करते हैं, तो मैं यह नहीं देखता कि आप किसी अन्य भाषा के साथ ऐसा क्यों नहीं कर सकते। यदि आप RESTRICTIONS सेक्शन में जावा लाइसेंस के "परमाणु सुविधाओं के लिए नहीं" के उल्लेख के बारे में सोच रहे थे, तो कुछ समय पहले ऐसा ही दिखता है और अब इसके बजाय यह कहता है कि "सावधान रहें, हमारी जिम्मेदारी नहीं"। फिर भी, मुझे लगता है (...)
hmijail

(...) मूल शब्दांकन सिर्फ gcc और clang के लाइसेंस की तरह था: किसी भी विशिष्ट उद्देश्यों के लिए कोई गारंटी नहीं। तो आप उन्हें विश्वसनीयता की आवश्यकता के लिए कुछ का उपयोग नहीं करेंगे, और इसके बजाय आपको कुछ प्रमाणित संकलक का उपयोग करने की आवश्यकता होगी, अगर नौकरी के लिए सभी विशिष्ट भाषा के लिए सभी रास्ते नहीं जा रहे हैं (एडीए?)।
हमीजेल

4

ऐसा लगता है कि जावा में लिखा गया कारण यह है कि उनके पास घर में जावा विशेषज्ञता है और यह संभवतः C ++ 0x / 11 के साथ एक साथ मिल जाने से पहले लिखा गया था (हालांकि यह अभी भी सक्रिय विकास में है)।

उनका कोड वास्तव में केवल जावा नाम से है, वे sun.misc.Unsafe का उपयोग करते हैं जो कि जावा के बिंदु को बहुत हरा देता है और सुरक्षा माना जाता है। मैंने डिस्क्राइटर का C ++ पोर्ट लिखा है और यह जावा कोड को शिप करता है (मैंने JVM को ट्यून करने में बहुत समय नहीं लगाया)।

उस ने कहा, विघटनकारी इस प्रकार के सिद्धांत भाषा विशिष्ट नहीं हैं, उदाहरण के लिए कम विलंबता सी ++ कोड की अपेक्षा न करें जो कि ढेर से मुक्त हो या मुक्त हो।


क्या आप अपने कार्यान्वयन की ओर इशारा कर सकते हैं? मैंने उच्च प्रदर्शन का दावा करने की तुलना में इस तरह के कुछ कार्यान्वयन को देखा, लेकिन दोनों ने सरलीकरण के साथ धोखा दिया: उदाहरण के लिए, मूल निर्माता की तरह बहु-निर्माता / उपभोक्ता सक्षम होने के बजाय 1 निर्माता + 1 उपभोक्ता को सख्त करना। डिस्क्राइटर के लेखक ने स्वयं एक Google समूह थ्रेड में उल्लेख किया है कि जावा संस्करण में हार्डवेअरिंग मापदंडों द्वारा प्रदर्शन में सुधार किया जा सकता है।
हमीजेल

4

यह प्रश्न तथ्य के रूप में एक गलत आधार बताता है, फिर उस गलत आधार के बारे में एक तर्क देता है।

इस में खोदो .. "जीसी उपयोग को कम करने के लिए उनके सभी डिजाइन अंक" - बस सच नहीं है। विघटनकारी में नवाचार जीसी के साथ बहुत कम है। विघटनकारी प्रदर्शन करता है क्योंकि इसका डिज़ाइन चतुराई से विचार करता है कि आधुनिक कंप्यूटर कैसे काम करते हैं - ऐसा कुछ जो किसी की अपेक्षा कम आम है। चर्चा के लिए क्लिफ क्लिक की बात http://www.azulsystems.com/events/javaone_2009/session/2009_J1_HardwareCrashCourse.pdf देखें ।

यह अच्छी तरह से ज्ञात है कि LMax अज़ुल के ग्राहक हैं। मुझे पहले से पता है कि अज़ुल जीसी के साथ केवल एक गैर-वस्तु है - 175 जीबी के ढेर के साथ भी।


इस पर सच्चाई का एक दाना है। वे एक प्रमुख संग्रह से बचने के लिए हर रात वीएम को पुनः आरंभ करते हैं। यही कारण है कि मार्टिन फाउलर ने लिखा, वैसे भी और वह कोई डमी नहीं है: "बाकी सिस्टम की तरह, बाधित रातोंरात बाउंस होते हैं। यह उछाल मुख्य रूप से मेमोरी को पोंछने के लिए किया जाता है ताकि ट्रेडिंग के दौरान एक महंगी कचरा संग्रह की घटना की संभावना कम हो।" martinfowler.com/articles/lmax.html
जिमीजैम

2
काफी नहीं। हम हर रात 5 मिनट के व्यापार अंतराल में एक मैनुअल जीसी को ट्रिगर करते थे, और देखते थे ताकि एक दिन में केवल प्रमुख जीसी हो। जो अज़ुल ज़िंग के साथ बेमानी हो गया। (स्रोत: मैंने हाल ही में LMAX में काम किया)
टॉम जॉनसन

@TomJohnson लव को अंदर का स्कूप मिल रहा है। क्या आप कह रहे हैं कि मार्टिन फाउलर का वर्णन गलत है? क्या समय के साथ इसका समाधान संभव है?
जिम्मीजम्स

2
मैं कह रहा हूँ कि वह कुछ मामूली विवरणों पर ठीक नहीं था। हमने अपने सिस्टम को दैनिक आधार पर बाउंस नहीं किया, लेकिन हमने दिन के अंत में सफाई की।
टॉम जॉनसन

3

उन्हें निम्न स्तर पर सोचना होगा

उपरोक्त उत्तर आपके द्वारा खोजे जा रहे उत्तर का आधा हिस्सा बनाता है। LMAX ब्लॉग की तुलना में तर्क को पूरा करने के लिए आप एक और आधा पा सकते हैं :

बहुत कुशल होते हुए भी, यह कई त्रुटियों को जन्म दे सकता है क्योंकि इसे पेंच करना बहुत आसान है ...

जैसा कि LMAX डेवलपर्स द्वारा स्वीकार किया गया है, उस तरह के कोड को विकसित करना, समझना और डीबग करना मुश्किल हो सकता है - यहां तक ​​कि जावा में भी। निम्न स्तर पर आगे जाने से जहाँ वे अब केवल इस समस्या को बढ़ाएँगे, जैसा कि निम्न स्तरीय प्रोग्रामिंग भाषाओं पर विकिपीडिया लेख में बताया गया है :

एक निम्न-स्तरीय भाषा में लिखा गया कार्यक्रम बहुत तेज़ी से चलाने के लिए बनाया जा सकता है, और एक बहुत ही छोटी मेमोरी फ़ुटप्रिंट के साथ; उच्च-स्तरीय भाषा में एक समान कार्यक्रम अधिक हैवीवेट होगा। निम्न-स्तरीय भाषाएँ सरल हैं, लेकिन कई तकनीकी विवरणों के कारण, जिन्हें याद रखना चाहिए, का उपयोग करना कठिन माना जाता है

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


3

यदि आप जावा को वाक्यविन्यास भाषा के रूप में उपयोग करते हैं और इसके JDK पुस्तकालयों से बचते हैं तो यह संकलित गैर-जीसी भाषा के रूप में तेज़ हो सकता है। जीसी रीयल-टाइम सिस्टम के लिए उपयुक्त नहीं है, लेकिन जावा में सिस्टम विकसित करना संभव है जो किसी भी कचरे को पीछे नहीं छोड़ते हैं। परिणामस्वरूप GC कभी ट्रिगर नहीं होता है।

हम मानते हैं कि जावा भाषा और प्लेटफ़ॉर्म में C / C ++ के कई फायदे हैं और हमने इसे साबित करने के लिए कुछ अल्ट्रा-लो-लेटेंसी जावा घटकों को विकसित और बेंचमार्क किया है। हम इस लेख में ऐसा करने की तकनीकों के बारे में बात करते हैं: बिना जीसी के जावा विकास


2
रियल-टाइम सिस्टम के लिए उपयुक्त कचरा संग्राहक हैं। JVM का डिफ़ॉल्ट कलेक्टर नहीं हो सकता है, लेकिन इसका मतलब यह नहीं है कि जीसी सामान्य रूप से वास्तविक समय के लिए अनुपयुक्त है। लेकिन सादा malloc/freeया तो वास्तविक समय के लिए उपयुक्त नहीं है क्योंकि आवंटन का समय विखंडन के कारण अबाधित है।
डोभाल

1
हम सब कुछ के लिए फास्ट ऑब्जेक्ट पूल के उपयोग की वकालत करते हैं ताकि वार्मिंग के बाद कोई आवंटन न हो।

2

LMAX एक उच्च प्रदर्शन इंटर-थ्रेड मैसेजिंग लाइब्रेरी है।

उपयोगी होने के लिए किसी और को उपयोगी कार्य करने के लिए प्रत्येक थ्रेड प्राप्त करने के लिए कोड लिखना होगा। यह देखते हुए कि कोड जावा या सी # में होने की सबसे अधिक संभावना है और फिर भाषा के बहुत कम विकल्प हैं जो उनके साथ अच्छी तरह से इंटरफेस करते हैं।

C या C ++ का उपयोग करना एक अच्छा विकल्प नहीं है, जब तक कि आप अपने उपयोगकर्ताओं को एक ही ओएस पर सीमित नहीं करना चाहते, क्योंकि उनमें कोई थ्रेडिंग मॉडल परिभाषित नहीं है।

जावा इन दिनों बहुत सारे सॉफ्टवेयर विकास के लिए मानक है, इसलिए जब तक आपके पास एक अच्छा कारण नहीं है, अन्यथा यह सबसे अच्छा विकल्प है। (जैसा देश वैसा भेष…)

जावा में उच्च प्रदर्शन सॉफ्टवेयर लिखना (या C #) अक्सर एक बिंदु साबित करने के लिए किया जाता है ...


1
नया C ++ 11 मानक मल्टीथ्रेडिंग का समर्थन करता है ...
केसी

@ कैसी, और कितने वास्तविक दुनिया सी ++ संकलक इसका उपयोग करते हैं? और इन कंपाइलरों की लागत कितनी है। शायद 20 वर्षों में यह उपयोगी होगा, तब तक आप इस पर निर्भर नहीं रह सकते।
इयान

विघटनकर्ता sun.misc.Unsafe का उपयोग बहुत कम करता है जो दर्शाता है कि आप वास्तव में जावा में कम विलंबता कोड को अपने पैर की अंगुली को सी जमीन में डुबोए बिना नहीं लिख सकते हैं
जेम्स

3
Gcc C ++ थ्रेड्स का समर्थन करता है और यह मुफ्त है
जेम्स

@ इयान: 2 साल बाद और सभी सामान्य इस्तेमाल किए गए कंपाइलर इसका समर्थन करते हैं;)। यहां तक ​​कि जो मुक्त हैं।
रुतिक्स
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.