मेरे काम पर हमने हाल ही में एक नियंत्रण अनुप्रयोग के लिए सिस्टम आर्किटेक्चर समाप्त कर दिया है जिसमें लगभग एक से दो सेकंड की अधिकतम विलंबता है। यह एक आईपी लैन के माध्यम से संचारित छोटे एआरएम ऑन-चिप बॉक्स पर वितरित किया जाता है।~ 1s विलंबता नियंत्रण ऐप: क्या यह जावा के लिए उपयुक्त है?
हम शुरू में भविष्यवाणी करते हैं कि हम सी या सी ++ का उपयोग करेंगे, क्योंकि यह शास्त्रीय नियंत्रण प्रणाली भाषा है। आवेदन को कार्यान्वित करने के तरीके पर चर्चा करने के बाद अब हम महसूस करते हैं कि सी ++ में पुस्तकालयों की सीमित मात्रा है, आत्मनिरीक्षण की कमी है, और इसमें कुछ अन्य गुण हैं जो विकास को धीमा कर सकते हैं। मेरे सहयोगी ने तब सुझाव दिया कि जावा नौकरी के लिए तैयार हो सकता है।
मैं वास्तव में एक नियंत्रण ऐप के लिए जीसी चलाने की विलंबता के बारे में डरता हूं, और मैं आरएआईआई छोड़ने के लिए भी अनिच्छुक हूं, क्योंकि ऐप कई बाहरी संसाधनों (सॉकेट, फ़ाइल हैंडल, बाहरी से हैंडल का उपयोग करेगा) libs आदि)।
समर्थक/चोर सूची वर्तमान में इस प्रकार है:
C++
+ RAII - Easy resource management - it will be a complex system
+ System language - speed if we cant't find a JIT VM for our ARM
+ No GC - no big worst case latencies from the GC
+ Easy to integrate with some shared mem libs that we have to interface with
- Fewer free as in beer libs
- Lacks introspection - Mapping classes to DB and external data formats (XML)
would benefit from this (ORM /JAXB) approach
- Easy to shoot one self in the foot - hard and expensive to find programmers
which don't make big mistakes
- Memory fragmentation - needs tuning and workarounds
Java
+ Huge amount of libs
+ Introspection - serialization becomes a breeze (see C++ section)
+ Easier to find 'good enough' programmers
- No RAII - Client has to remember finally or you leak
resources. IMO Java programmers tend to ignore this
problem unless they have server app background.
- No System Language - possibly slower although ARMj could alleviate this
- GC - latency might go up (don't know if parallel GC will work - seems that
you might get fragmentation, see note below).
- Need to write JNI for the shared mem libs that we interface with
- Maybe ORACLE will eat us
समानांतर जीसी के साथ स्मृति विखंडन उल्लेख किया गया था in this AMD article
मैं जावा का उपयोग करना अच्छा लगेगा अगर जीसी विलंबता एक समस्या नहीं था और हम आरएआईआई मिल सकता है। इसलिए मैंने अन्य लैंगों में भी देखा है जिनके पास आरएआईआई है और अच्छे विकल्प के रूप में काम कर सकते हैं, और अब तक मुझे पता चला है कि डी, एडा, वीबी, पर्ल, पायथन (सी), पीएचपी, टीसीएल और लुआ कुछ हैं आउट-ऑफ-स्कोप कॉलबैक का प्रकार। मेरी सहज प्रतिक्रिया जो शायद डी, पायथन और एडीए नियंत्रण एप के लिए उपयुक्त हो सकती है। डी और एडीए मेरे पसंदीदा हैं।
तो, मेरा सवाल है: क्या आपके पास इस पर कोई सिफारिश है? जावा एक व्यवहार्य विकल्प है, और यदि आप कोई भी भाषा चुन सकते हैं, तो यह क्या होगा?
@ डिसाउन: जीसी आपकी एकमात्र दुश्मन नहीं है। जेआईटी लात मारने से लेटेंसी-स्पाइक भी शुरू हो सकता है, (जो कि Google I/O 2010 में बीटीडब्ल्यू बोलता था, जहां नया एंड्रॉइड जेआईटी डिवाइस गैर-जेआईटी एक से पहले धीमा प्रदर्शन करेगा, फिर तेज़)। मुझे लगता है कि आपको http://javolution.org में दिलचस्पी हो सकती है जहां कुछ दिलचस्प लेख जुड़े हुए हैं। – SyntaxT3rr0r
@ वेबिनेटर: लिंक के लिए धन्यवाद, अब इसे देख रहा है ... –